linux - 我们在使用套接字时应该处理什么错误

标签 linux sockets networking tcp udp

在使用非阻塞套接字与客户端通信时,除了直接调用 close() 之外,我们还必须注意和处理哪些错误代码?任何人都可以列出它们并就我们必须做的额外工作提出一些意见吗?

目前我们只处理 EAGAIN 和 EWOULDBLOCK,对于所有其他错误我们只关闭套接字。这种套接字异常例程是否足以用于服务器软件?

最佳答案

我认为您基本上是正确的。我的代码重试了另外两个暂时性错误而不是关闭套接字,它们是:

EINTR - 如果系统调用被信号传递中断,则可以返回。通常适当的响应是再次尝试系统调用。 (有关为什么会发生这种情况的详细信息,请参阅 here)

ENOBUFS - 在某些情况下,如果网络接口(interface)的输出队列已满,send() 可以返回此信息。 (是的,您希望 send() 返回 EWOULDBLOCK 或 EAGAIN,但我已经看到它返回了)

关于linux - 我们在使用套接字时应该处理什么错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21139797/

相关文章:

linux - 如何修复 bash 中的错误替换错误?

linux - 使用非 GNU awk 保存修改

c - 对套接字使用 AES_ctr128_encrypt 时出现 SIGSEGV 错误

java - 将套接字输出发送到 GUI 时出现问题

C++ Windows - 以编程方式检查软件是否访问互联网?

linux - 如何在 Linux 中创建虚拟以太网设备?

C++、linux、fork、execvp、waitpid 和 SIGTSP

java - BufferedWriter/PrintWriter/OutputStreamWriter 在调用 .close() 之前不刷新缓冲区(通过套接字输出流)

linux - 如何使 Poky (Yokto) Dizzy 发行版中的 udhcpc 更改永久化

android ftp上传已停止错误