sockets - TCP RST 是否会导致主机丢弃接收缓冲区?

标签 sockets tcp

收到 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/

相关文章:

c# - 创造性地使用 MarshalByRefObject

http - 有没有监控HTTP响应的工具?

linux - 有什么方法可以将 unix 套接字上的 open() 调用映射到 socket() 和 connect() 调用?

c - 如何在一个进程中进行 TLS 握手并在另一个进程中处理其余连接?

java - BufferedReader 链接到套接字,readLine() != null 是如何工作的?

java - 在selector.selete()之后,selectedKeys()返回空

tcp - NiFi 转发/复制 TCP 流

ios - iphone 上的队列?

android - 通过套接字查看 Web 服务器。 . .

c++ - Winsock TCP 监听器在 closesocket() 调用成功后保持在 LISTENING 状态