为了测试网络应用程序,我编写了一个 asio 端口“代理”:它在套接字上侦听应用程序客户端活动,并将所有传入的数据包发送到另一个套接字,由应用程序服务器侦听,然后返回。
现在,当应用程序或服务器由于各种原因断开连接时,“代理”通常会收到 EOF,但有时它会收到“连接重置”。
因此,问题是:套接字何时因“连接重置”错误而失败?
为了测试网络应用程序,我编写了一个 asio 端口“代理”:它在套接字上侦听应用程序客户端活动,并将所有传入的数据包发送到另一个套接字,由应用程序服务器侦听,然后返回。
现在,当应用程序或服务器由于各种原因断开连接时,“代理”通常会收到 EOF,但有时它会收到“连接重置”。
因此,问题是:套接字何时因“连接重置”错误而失败?
当本地端尝试向远程端发送数据并且远程端以RST
设置了标志(而不是ACK
)的数据包应答时,TCP 连接被“重置”。这几乎总是会发生,因为远程端不知道任何与远程和本地地址以及远程和本地端口号匹配的 TCP 连接。可能的原因包括:
请注意,如果远程端以SYN
数据包响应 TCP 连接中的初始 ( ) 数据RST
包,则视为“连接被拒绝”而不是“对等连接重置”。