【问题标题】:recvfrom: Resource temporarily unavailable. Why? [duplicate]recvfrom:资源暂时不可用。为什么? [复制]
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 2011-01-23
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2018-08-04
    • 2021-05-07
    相关资源
    最近更新 更多