我使用DatagramChannels在Java中编写了一个多线程UDP代理。
在出现以下异常之前一切正常:
java.net.SocketException: Network dropped connection on reset: no further information
at sun.nio.ch.DatagramChannelImpl.receive0(Native Method)
at sun.nio.ch.DatagramChannelImpl.receiveIntoNativeBuffer(Unknown Source)
at sun.nio.ch.DatagramChannelImpl.receive(Unknown Source)
at sun.nio.ch.DatagramChannelImpl.receive(Unknown Source)
at com.fabio.rotumaster.proxy.ProxyMain.handlePacket(ProxyMain.java:189)
at com.fabio.rotumaster.proxy.ProxyMain.run(ProxyMain.java:169)
at java.lang.Thread.run(Unknown Source)
在第189行的ProxyMain.java中,只有被调用的接收方法:
SocketAddress sender = this.clientChannel.receive(buffer);
错误会不时出现。有时只有一次,有时连续5次。
有没有人有想法?
答案 0 :(得分:2)
这是Winsock error 10052: WSAENETRESET
:
网络在重置时断开连接。
由于保持活动活动在操作过程中检测到故障,连接已断开。如果尝试在已经失败的连接上设置SO_KEEPALIVE,它也可以由setsockopt返回。
如何在UDP套接字上获得它似乎是一个谜,但是MSDN also says under recvfrom()
:
对于数据报套接字,此错误表示生存时间已过期。
这是UDP实现往往无用地向应用程序报告的许多错误之一。你几乎不得不忽略它们。