![当我终止一个进程并且套接字发送缓冲区不为空时会发生什么?](https://linux22.com/image/1442512/%E5%BD%93%E6%88%91%E7%BB%88%E6%AD%A2%E4%B8%80%E4%B8%AA%E8%BF%9B%E7%A8%8B%E5%B9%B6%E4%B8%94%E5%A5%97%E6%8E%A5%E5%AD%97%E5%8F%91%E9%80%81%E7%BC%93%E5%86%B2%E5%8C%BA%E4%B8%8D%E4%B8%BA%E7%A9%BA%E6%97%B6%E4%BC%9A%E5%8F%91%E7%94%9F%E4%BB%80%E4%B9%88%EF%BC%9F.png)
在 Windows 中(可能在其他操作系统中也是如此),如果一个进程与另一台机器上的另一个进程有 TCP 连接,然后我终止该进程,则会向另一台机器发送一个 RST 数据包以指示连接结束。
现在想象一下,当进程终止时,发送缓冲区中仍然留有一些数据。在这种情况下会发生什么,这些剩余的数据会被发送到另一台机器,然后发送一个 RST 数据包,还是这些剩余的数据会被忽略,只发送一个 RST 数据包?
答案1
立即发送RST并丢弃数据。
在 Windows 中(可能在其他操作系统中也是如此),如果一个进程与另一台机器上的另一个进程有 TCP 连接,然后我终止该进程,则会向另一台机器发送一个 RST 数据包以指示连接结束。
现在想象一下,当进程终止时,发送缓冲区中仍然留有一些数据。在这种情况下会发生什么,这些剩余的数据会被发送到另一台机器,然后发送一个 RST 数据包,还是这些剩余的数据会被忽略,只发送一个 RST 数据包?
立即发送RST并丢弃数据。