2
为了测试网络应用程序,我编写了一个asio端口“proxy”:它侦听套接字以获取应用程序客户端活动,并将所有传入数据包发送到侦听该套接字的另一个套接字由应用程序服务器返回。socket与EOF和连接重置失败
现在,当应用程序或服务器因各种原因断开连接时,“代理”通常会收到EOF,但有时会收到“连接重置”。
因此,问题是:何时套接字失败并出现“连接重置”错误?
为了测试网络应用程序,我编写了一个asio端口“proxy”:它侦听套接字以获取应用程序客户端活动,并将所有传入数据包发送到侦听该套接字的另一个套接字由应用程序服务器返回。socket与EOF和连接重置失败
现在,当应用程序或服务器因各种原因断开连接时,“代理”通常会收到EOF,但有时会收到“连接重置”。
因此,问题是:何时套接字失败并出现“连接重置”错误?
TCP连接是“复位”时,本端试图将数据发送到远程端和与该RST
标志集(而不是ACK
)的分组的远端的答案。这几乎总是发生,因为远程端不知道任何与本地地址和本地端口号相匹配的远程& TCP连接。可能的原因包括:
注意,如果远端应答初始(SYN
)数据包与数据包RST
TCP连接,它被认为是“连接被拒绝”,而不是“由对等连接重置”。
有些服务器还故意将'RST'发送给行为异常的客户端以立即丢弃连接,因为简单的'close()'首先发送传出内核套接字缓冲区中待处理的所有数据,然后才发送'FIN'。 – 2013-04-04 19:32:25