【发布时间】:2018-06-26 14:49:45
【问题描述】:
我多次运行这段代码(对于 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:资源暂时不可用
可能是什么问题?
【问题讨论】:
-
@EugeneSh。感谢您的回答。我明白问题是什么,但我该如何解决呢?我可以忽略这个问题并再次使用 recvfrom 循环吗?
-
增加超时或使其完全阻塞(如果可能)。
-
@ikegami 这意味着实际上我不明白这个问题!我认为以这种方式使用
setsockopt()只会让我跳过recvfrom,如果我没有收到任何东西并继续使用以下代码......不会让它返回错误!
标签: c sockets nonblocking recvfrom