我有一点问题,但还没有找到解决方法。
问题似乎很简单:
我有一个过程。在这个过程中,我想检查是否有UDP消息发送到我正在使用的端口。如果有消息发送,整个发送和接收的东西都没问题。如果没有发送消息,则进程正在等待消息,并且在发送下一条消息之前程序不会继续。
问题是如何修改我的代码,以便在没有消息的情况下继续进行。
我的代码(接收UDP消息的标准代码):
if((nbrecv = recvfrom(s, buffer, BUFFER_SIZE, 0, &remote, &len_remote)) == -1){
fprintf(stderr, "failure!\n");
exit(-1);
}
etc.
答案 0 :(得分:2)
您的选择如下:
select()
,poll()
,epoll()
等等待数据,而不是直接致电recvfrom()
O_NONBLOCK
在套接字上设置fcntl()
标志,将套接字设置为非阻塞。这将使recvfrom()
立即返回而不是阻止。SO_RCVTIMEO
套接字选项设置接收超时。