![](/img/trans.png)
[英]Why is there TCP RST packet after sending a string and closing a socket
[英]Why is one endpoint of this TCP connection sending a packet with the RST flag?
我正在编写一个尝试执行以下操作的应用程序:
这就是问题所在。 当我尝试运行该应用程序时,TCP交换如下所示:
前三个数据包建立三向握手 ,第四个和第五个数据包是服务器写入的数据的传输及其确认。
如预期的那样,服务器套接字发送一个设置了FIN
标志的数据包,以指示它正在关闭其连接的末尾。 客户端确认这一点,然后尝试将其数据写入套接字。 服务器立即发送RST
数据包,过早终止连接。
为什么会这样?
注意:以上捕获是在Windows 8.1上完成的。
发送者无法在[FIN]之后发送数据。 这样的动作将导致接收机发出[RST]。
FIN可能表明服务器已双向完全关闭连接。 在这种情况下,如果它在连接上收到任何其他数据,它将发出RST。 这表明您有应用程序协议错误。 如果服务器发送答复然后关闭套接字,则客户端无法通过该连接发送任何其他内容。
可能需要服务器使用SHUT_WR
调用shutdown()
,然后在关闭套接字之前从客户端读取其他内容。 也许您只是做错了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.