2013-10-23 50 views
0

我有一点问题,但还没有找到解决方案。接收UDP消息,但如果没有,则转到

的问题似乎很简单:

我有一个过程。在这个过程中,我想检查是否有UDP消息发送到我正在使用的端口。如果有消息发送,整个发送和接收的事情都没有问题。如果没有发送消息,则该过程正在等待消息,并且程序不会继续,直到发送下一个消息。

问题是如何修改我的代码以便在没有消息的情况下继续进行。

我的代码(标准代码为接收UDP消息):

if((nbrecv = recvfrom(s, buffer, BUFFER_SIZE, 0, &remote, &len_remote)) == -1){ 
    fprintf(stderr, "failure!\n"); 
    exit(-1); 
} 

etc. 

回答

2

您的选项如下:

  1. 使用select()poll()epoll()等,以等待数据,而不是调用的recvfrom()直接
  2. 通过使用fcntl()设置套接字上的O_NONBLOCK标志来将您的套接字设置为非阻塞状态。这将使recvfrom()立即返回而不是阻塞。
  3. (不推荐)使用SO_RCVTIMEO套接字选项设置接收超时。