recvfrom:资源暂时不可用。为什么?

时间:2018-01-17 16:36:39

标签: c sockets nonblocking recvfrom

我正在多次运行这段代码(对于 UDP套接字上的非阻塞recvfrom):

struct timeval read_timeout;
read_timeout.tv_sec = 0;
read_timeout.tv_usec = 1000;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &read_timeout, sizeof read_timeout);
ssize_t n = recvfrom(sockfd, recvline, sizeof(recvline), 0, NULL, NULL);
if (n < 0) {
    perror("recvfrom");
    return -1;
} else // ... normal usage

有时程序停止,我从perror

收到以下错误
  

recvfrom:资源暂时不可用

问题是什么?

1 个答案:

答案 0 :(得分:1)

只需修改代码即可执行您想要的操作。当您收到错误,而不是无条件地调用perror时,请检查它是否超时。如果它不是超时,则调用perror并返回。如果超时,请在超时时执行您想要执行的操作。