0

我有一个小问题,但还没有找到解决方案。

问题似乎很简单:

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

问题是如果没有消息,我如何修改我的代码以让该过程继续进行。

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

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

etc.
4

1 回答 1

2

您的选择如下:

  1. 使用select(), poll(),epoll()等来等待数据而不是recvfrom()直接调用
  2. O_NONBLOCK通过使用设置套接字上的标志将套接字设置为非阻塞fcntl()。这将recvfrom()立即返回而不是阻塞。
  3. SO_RCVTIMEO(不推荐)使用套接字选项设置接收超时。
于 2013-10-23T10:16:07.100 回答