【发布时间】:2012-08-29 04:37:36
【问题描述】:
我正在通过 TCP 套接字测试客户端-服务器通信。我用 C 语言编写了服务器,并在 Linux 机器上运行它,我使用 nc 作为客户端进行测试。
在与客户端进行初始消息交换后,服务器发送一些 定期向客户端发送消息而没有得到任何响应。
如果我杀死客户端,我希望服务器完成的第一个 send() 失败
EPIPE 错误,但这仅在客户离开后的第二个 send() 时出现!
我杀死客户端后的第一个 send() 能够成功地将 1100 字节发送到(我想是关闭的)套接字。以下send() 操作以EPIPE 结束。
有人可以向我解释这种行为吗? 是不是因为我写入 TCP/IP 堆栈所以它取决于堆栈 什么时候可以交付? 如果是这样,我如何检查连接状态?确保对等体仍然存在。
【问题讨论】: