在OSX上,在绑定&上调用accept()之后,我继续得到套接字错误316。听插座。 我得到一个有效的套接字返回,我相信我然后使用它很好,(虽然我可能不是,我需要仔细检查这个,因为我随时接受数百个连接)但是errno已被设置。
我正在尝试理解the documentation on the unix accept(2) man pages哪些注释(顺便提一下,apple's accept() documentation中缺少这些注释)
Linux accept()(和accept4())传递已经挂起的网络错误 在新套接字上作为来自accept()的错误代码。这种行为 与其他BSD套接字实现不同。为了可靠的操作 应用程序应检测为该定义的网络错误 在accept()之后的协议,并通过重试将它们视为EAGAIN。
现在,316使用ETIMEDOUT(60)进行256 OR运算。所以,我很好奇我应该如何处理这个问题;
答案 0 :(得分:1)
除非errno
返回-1,否则不要检查accept()
。如果accept()
返回有效的文件描述符,则errno
的值为未定义。