【发布时间】:2013-04-05 00:51:35
【问题描述】:
为了测试网络应用程序,我编写了一个 asio 端口“代理”:它在套接字上侦听应用程序客户端活动,并将所有传入的数据包发送到另一个套接字,由应用程序服务器侦听,然后返回。
现在,当应用程序或服务器由于各种原因断开连接时,“代理”通常会收到 EOF,但有时它会收到“连接重置”。
因此,问题是:套接字何时因“连接重置”错误而失败?
【问题讨论】:
标签: linux sockets networking
为了测试网络应用程序,我编写了一个 asio 端口“代理”:它在套接字上侦听应用程序客户端活动,并将所有传入的数据包发送到另一个套接字,由应用程序服务器侦听,然后返回。
现在,当应用程序或服务器由于各种原因断开连接时,“代理”通常会收到 EOF,但有时它会收到“连接重置”。
因此,问题是:套接字何时因“连接重置”错误而失败?
【问题讨论】:
标签: linux sockets networking
当本地端尝试向远程端发送数据并且远程端以设置了RST 标志(而不是ACK)的数据包应答时,TCP 连接被“重置”。这几乎总是会发生,因为远程端不知道任何与远程和本地地址以及远程和本地端口号匹配的 TCP 连接。可能的原因包括:
请注意,如果远程端使用RST 数据包回答 TCP 连接中的初始 (SYN) 数据包,则将其视为“连接被拒绝”而不是“对等连接重置”。
【讨论】:
RST发送给行为不端的客户端以立即断开连接,因为普通的close()首先发送所有待处理的数据在传出内核套接字缓冲区中,然后才发送FIN。