什么是SOCKET accept()错误errno 316?

时间:2015-05-15 10:54:02

标签: c linux macos sockets

在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运算。所以,我很好奇我应该如何处理这个问题;

  1. 如果在accept()之后设置了任何错误,我应该再次接受()吗?
  2. 我应该关闭()接受DID返回的SOCKET吗?
  3. 是unix errno代码的8位? (我看到的所有代码都是< 128),这是一个 在内存中设置错误的位,或者它是一个特殊的标志,如警告 (我找不到关于errno格式的任何文档)
  4. 这个错误是否意味着我刚刚从堆栈弹出的连接超时...本身和操作系统断开了连接,或者我没有足够快地接受()?

1 个答案:

答案 0 :(得分:1)

除非errno返回-1,否则不要检查accept()。如果accept()返回有效的文件描述符,则errno的值为未定义