RST 的集中情况
“Connection reset by peer”,该错误和相同之处都是服务器异常关闭了 socket,但和“Connection reset”是有一定区别的: 服务器返回了“RST”时,如果此时客户端正在从 Socket 套接字的输出流中读数据则会提示 Connection reset”; 服务器返回了“RST”时,如果此时客户端正在往 Socket 套接字的输入流中写数据则会提示“Connection reset by peer”。
而 Connection reset 和 Connection reset by peer 产生的原因都是因为客户端进入 CLOSE_WAIT 状态, 如果客户端继续在这个 socket 上发送数据, 那么服务端给回 RST 包。 服务端都已经发出 FIN 表示请求关闭了, 你客户端还发数据过去, 有意义么? 直接给你 RST。
其实这个问题服务端客户端同理,如果客户端关闭 socket 之后,服务端还在发消息,服务端同样会抛出 Connection reset 异常。
Tcp 选项