接收UDP消息,但如果没有则消息

时间:2013-10-23 10:11:10

标签: c sockets udp

我有一点问题,但还没有找到解决方法。

问题似乎很简单:

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

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

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

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

etc.

1 个答案:

答案 0 :(得分:2)

您的选择如下:

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