在使用非阻塞套接字与客户端通信时,除了直接调用 close() 之外,我们还必须注意和处理哪些错误代码?任何人都可以列出它们并就我们必须做的额外工作提出一些意见吗?
目前我们只处理 EAGAIN 和 EWOULDBLOCK,对于所有其他错误我们只关闭套接字。这种套接字异常例程是否足以用于服务器软件?
最佳答案
我认为您基本上是正确的。我的代码重试了另外两个暂时性错误而不是关闭套接字,它们是:
EINTR - 如果系统调用被信号传递中断,则可以返回。通常适当的响应是再次尝试系统调用。 (有关为什么会发生这种情况的详细信息,请参阅 here)
ENOBUFS - 在某些情况下,如果网络接口(interface)的输出队列已满,send() 可以返回此信息。 (是的,您希望 send() 返回 EWOULDBLOCK 或 EAGAIN,但我已经看到它返回了)
关于linux - 我们在使用套接字时应该处理什么错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21139797/