【发布时间】:2018-03-01 12:07:19
【问题描述】:
我需要了解 EAGAIN 和 EWOULDBLOCK 之间的区别,因为我已经看到许多源代码仅针对 EAGAIN 进行检查(可能两个代码都代表相同的数字,请在此处纠正我。)
我的部分知识: 如果发送方缓冲区已满且接收方未接收任何数据,则阻塞套接字,如果调用 send(),发送方将被挂起。这是因为一旦数据被接收器读取,它在缓冲区中使用的空间就可用于新数据。如果您的套接字处于“非阻塞”模式,则“send()”将失败并显示“EAGAIN”或“EWOULDBLOCK”。
它们是否总是相同的数字,或者是否存在需要区别对待的任何情况。 ?
【问题讨论】:
-
两个符号常量的原因可能是历史性的,现在它们根本不应该被区别对待(并且在 IP 堆栈的大多数实现中不能,因为它们被定义为相同数值)。如果您想了解更多信息,那么将您的标题放入您最喜欢的搜索引擎应该足以让您阅读。
标签: sockets tcp operating-system