当使用非阻塞套接字与客户端通信时,我们必须关注哪些错误代码并执行除直接调用close()之外的其他操作?任何人都可以列出它们,并就我们必须做的额外工作发表一些意见吗?
目前我们只处理EAGAIN和EWOULDBLOCK,因为我们关闭套接字的所有其他错误。对服务器软件来说,这种套接字异常是否足够常规?
答案 0 :(得分:0)
我认为你大部分都是对的。我的代码重试了两个其他瞬态错误而不是关闭套接字,它们是:
EINTR - 如果系统调用因传递信号而中断,则可以返回此信息。通常适当的响应是再次尝试系统调用。 (有关可能发生这种情况的详细信息,请参阅here)
ENOBUFS - 在某些情况下,如果网络接口的输出队列已满,send()可以返回此值。 (是的,你希望send()改为返回EWOULDBLOCK或EAGAIN,但我已经看到了这个返回)