什么会导致 Resource temporarily unavailable
套接字错误 send()
命令?套接字设置为 AF_UNIX, SOCK_STREAM
。它大部分时间都有效,但偶尔会出现此错误。套接字的接收端似乎工作正常。
我知道这不是很详细,但我只是在寻找一般的想法。谢谢!
原文由 giroy 发布,翻译遵循 CC BY-SA 4.0 许可协议
那是因为您使用的是 non-blocking
套接字并且输出缓冲区已满。
来自 send()
手册页
When the message does not fit into the send buffer of the socket,
send() normally blocks, unless the socket has been placed in non-block-
ing I/O mode. In non-blocking mode it would return EAGAIN in this
case.
EAGAIN 是与 “资源暂时不可用” 相关的错误代码
考虑使用 select()
来更好地控制这种行为
原文由 Davide Berra 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答798 阅读✓ 已解决
1 回答3.3k 阅读
"Resource temporarily unavailable"
是对应于EAGAIN
的错误信息,这意味着该操作将被阻塞但请求了非阻塞操作。对于send()
,这可能是由于以下任何原因:fcntl()
显式地将文件描述符标记为非阻塞;或者MSG_DONTWAIT
标志传递给send()
;或者SO_SNDTIMEO
套接字选项设置发送超时。