如果不想在系统调用上等待,希望只是看一下就返回,然后做自己的事。那么可以设置成非阻塞。设置方法为:
int flag;
flag = fcntl(socket_fd, F_GETFL);
flag |= O_NONBLOCK;
fcntl(socket_fd, F_SETFL, flag);
对于读和写, 非阻塞,返回-1,并置errno为EAGAIN(等同于EWOULDBLOCK).所以出错处理也不一样。
例:
设置非阻塞 n = recvfrom(..); if (-1 == n && errno != EAGAIN){ perror("call to recvfrom"); exit(1); } else if (n == 0 || (n == -1 && errno == EAGAIN)){ printf("no data yet\n"); continue; } else { printf(received from client....); n = sendto(...); }
|
阅读(1533) | 评论(0) | 转发(0) |