- 论坛徽章:
- 1
|
回复 2# cjaizss
- void* udpReadata()
- {
- char c; // test spi error temp
- int i;
- unsigned char recvbuf[MAXBUF];
- unsigned char sendbuf[MAXBUF];
- unsigned char queuecmd[4];
- int ret;
- // command queue
- Queue q;
- ElemType e_tmp;
- InitQueue(&q);
-
- bzero(recvbuf, MAXBUF );
- bzero(sendbuf, MAXBUF );
- /* 创建 EPOLL 句柄,把监听 socket 加入到 epoll 集合里 */
- kdpfd = epoll_create(MAXEPOLLSIZE);
- len = sizeof(struct sockaddr_in);
- ev.events = EPOLLIN | EPOLLET;
- ev.data.fd = listener;
- if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, listener, &ev) < 0)
- {
- fprintf(stderr, "epoll set insertion error: fd=%d \n", listener);
- }
- else
- {
- printf("Listen socket added in epoll success \n");
- }
- while (1)
- {
- nfds = epoll_wait(kdpfd, events_udp, 10,-1 );
- printf("nfds values: %d ",nfds);
- if (nfds == -1)
- {
- perror("epoll_wait \n");
- break;
- }
- printf(" epoll wait ok \n");
-
- for (n = 0; n < nfds; ++n)
- {
- if (events_udp[n].data.fd == listener)
- {
- new_fd=events_udp[n].data.fd;
- int optudp =0; //设接收缓冲区为0 ,,,如果这地方不设置为0,PC上跑,在持续发一个命令一段时间后,再发新命令也不能立即响应。
- setsockopt(new_fd, SOL_SOCKET, SO_RCVBUF, &optudp, sizeof(optudp));
- ret = recvfrom(new_fd, recvbuf, MAXBUF, 0, (struct sockaddr *)&client_addr, &cli_len);
- if (ret > 0)
- {
- printf("\n");
- printf("revc Data length from PC:%d \n",ret);
- for(i=0;i<ret;i++)
- printf("%02X ",recvbuf[i]);
- printf("\n");
-
- Receive_Process(ret,recvbuf);//处理命令包函数
- }
- else
- {
- printf("received failed! error code %d ??message : %s \n",errno, strerror(errno));
- }
-
- fflush(stdout);
- }
- }
- }
- }
复制代码 在交叉编译时,开启了不优化操作,还是不能,但是发现一个奇怪现象,
持续发一个命令,比如10W次, 再换新命令,待新命令发到第7次后,新命令才能被正确执行...
这个现象很有规律,尝试了很多次,都是7次后,新命令得到执行
|
|