如何在recv调用上实现MSG_DONTWAIT

mjm*_*yer 3 c

我正在实现一个服务器模拟程序,并且想要检查是否通过 TCP/IP 套接字的 recv 接收到了任何内容,而无需等待。当我放置 MSG_DONTWAIT 标志时,recv 返回长度为 -1 和“资源暂时可用”的 errno。当使用 MSG_WAITALL 标志时,该调用有效。

Ste*_*f K 5

这不是错误,而是预期的行为。MSG_DONTWAIT 的文档指出:

如果没有可用数据,则不会阻塞,而是立即返回并返回错误 EAGAIN。

这意味着您应该等待并处理这种情况。

在此处查看参考资料,并在此处查看类似的讨论。