如果我設置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