何时抛出“java.io.IOException:Connection reset by peer”?

2022-08-31 12:39:08
ERROR GServerHandler  - java.io.IOException: Connection reset by peer
java.io.IOException: Connection reset by peer
        at sun.nio.ch.FileDispatcher.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(Unknown Source)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
        at sun.nio.ch.IOUtil.read(Unknown Source)
        at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
        at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:323)
        at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
        at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

此日志来自使用 netty 实现的游戏服务器。什么会导致此异常?


答案 1

java.io.IOException:由 Peer 节点重置连接

另一方在交易过程中突然中止了连接。这可能有许多原因,从服务器端开始是无法控制的。例如,最终用户决定关闭客户端或突然更改服务器,同时仍然与服务器交互,或者客户端程序崩溃,或者最终用户的互联网连接中断,或者最终用户的计算机崩溃,等等。


答案 2

为了扩展 BalusC 的答案,任何发送方在对等体停止读取并关闭其套接字后继续写入的情况都会产生此异常,对等方在自己的套接字接收缓冲区中仍有未读数据时关闭也是如此。换句话说,应用程序协议错误。例如,如果您向对等体写入了对等体不理解的内容,然后它关闭其套接字以示抗议,然后您继续写入,则对等方的 TCP 堆栈将发出 RST,从而导致此异常和消息在发送方。


推荐