我正在通过TCP套接字测试客户端和服务器的通信。我使用C编写了服务器并在Linux机器上运行,并使用nc作为测试客户端。
在与客户端进行初始消息交换后,服务器会定期向客户端发送一些消息,而不会收到任何响应。
如果我终止客户端,我希望服务器的第一个send()将失败并显示EPIPE错误,但是这只会在客户端离开后的第二个send()中出现!在我杀死客户端后,第一个send()能够成功地将1100个字节发送到(我想关闭的)套接字。随后的send()操作以预期的EPIPE结束。
有人可以解释这种行为吗? 这是因为我写入了TCP/IP堆栈,所以由堆栈决定何时传递吗? 如果是这样,如何检查连接状态?确保对等方仍然存在。
在与客户端进行初始消息交换后,服务器会定期向客户端发送一些消息,而不会收到任何响应。
如果我终止客户端,我希望服务器的第一个send()将失败并显示EPIPE错误,但是这只会在客户端离开后的第二个send()中出现!在我杀死客户端后,第一个send()能够成功地将1100个字节发送到(我想关闭的)套接字。随后的send()操作以预期的EPIPE结束。
有人可以解释这种行为吗? 这是因为我写入了TCP/IP堆栈,所以由堆栈决定何时传递吗? 如果是这样,如何检查连接状态?确保对等方仍然存在。