收到 TCP RST 数据包后,主机是否会丢弃接收缓冲区中已被远程主机确认但尚未被使用套接字的应用程序进程读取的所有剩余数据?
我想知道,一旦我对其他主机所说的内容不感兴趣(例如,为了节省资源),立即关闭套接字是否很危险;例如如果这可能导致对方丢失我已发送但他尚未读取的任何数据。
通常应该避免 RST 并指示完全的双向通信失败,还是像上例中那样,它们是单向强制断开连接的相对安全的方法?
最佳答案
我发现了该主题的一些很好的解释,它们表明在这种情况下很可能会丢失数据: http://blog.olivierlanglois.net/index.php/2010/02/06/tcp_rst_flag_subtleties
http://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reliable还提供了有关该主题的更多信息,并提供了我在代码中使用的解决方案。到目前为止,我还没有看到我的服务器应用程序发送任何 RST。
关于sockets - TCP RST 是否会导致主机丢弃接收缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873271/