Java:网络在重置时断开连接

时间:2017-03-17 08:36:45

标签: java networking

我使用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次。

有没有人有想法?

1 个答案:

答案 0 :(得分:2)

这是Winsock error 10052: WSAENETRESET

  

网络在重置时断开连接。

     

由于保持活动活动在操作过程中检测到故障,连接已断开。如果尝试在已经失败的连接上设置SO_KEEPALIVE,它也可以由setsockopt返回。

如何在UDP套接字上获得它似乎是一个谜,但是MSDN also says under recvfrom()

  

对于数据报套接字,此错误表示生存时间已过期。

@David Schwartz说:

  

这是UDP实现往往无用地向应用程序报告的许多错误之一。你几乎不得不忽略它们。