如果我设置mSocket.setSoTimeout(1000);
我得到获得操作超时异常的套接字读取
java.net.SocketTimeoutException:读超时
上mSocket.getInputStream().read()
等待的二分之一,预计之后。
但是,如果我做mSocket.setSoTimeout(0);
我得到
java.net.SocketException异常:操作超时
1分钟左右(55秒了我的大部分运行的)等待的是后令人费解。
我曾尝试在我的Mac OS El Capitan上增加sysctl tcp设置无济于事。如果这些设置将超时限制在一分钟左右,我应该像以前一样得到相同的读取超时异常。这个操作是什么超时异常?
编辑:它可能值得一提的是,我故意使用pfctl关闭网络,并且因为我通过tcp使用websockets,我希望连接不会中断,因为有很长的超时时间,并且一旦将网络连接到网络再来一次。
堆栈跟踪两个例外是相同的,即
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at java.net.SocketInputStream.read(SocketInputStream.java:203)
at org.jwebsocket.kit.WebSocketProtocolAbstraction.protocolToRawPacket(WebSocketProtocolAbstraction.java:220)
当您切断网络时,有没有正在进行的发送? – EJP
是的,很可能因为我每秒发送1.5个信息。 – user3740387