我正在嘗試在Java應用程序上設置套接字超時。一些開發人員在OS X上,其他人在Windows上。問題是在Windows機器上,我們得到一個SocketException:連接在2分鐘後重置,無論超時設置爲什麼。但是,在OS X上,它完全按照預期工作。Java setSoTimeout在Windows上不工作
這似乎是JVM與基礎Windows套接字庫進行交互的具體問題。無論如何要解決這個問題。
這是創建套接字的代碼片段。
protected Socket openSocket() throws UnknownHostException, IOException {
Socket socket = new Socket();
SocketAddress endpoint = new InetSocketAddress(this.getHost(), this.getPort());
try {
if (this.getConnectTimeout() != null) {
socket.connect(endpoint, this.getConnectTimeout());
} else {
socket.connect(endpoint);
}
} catch (ConnectException ex) {
throw ex;
} catch (IOException ex) {
ConnectException connEx = new ConnectException(
String.format("Failed to connect to service at %s:%d. Reason: %s",
this.getHost(), this.getPort(), ex.getMessage()));
connEx.initCause(ex);
throw connEx;
}
logger.debug("Socket opened to {}:{}", this.getHost(), this.getPort());
if (this.getResponseTimeout() != null) {
socket.setSoTimeout(this.getResponseTimeout());
}
return socket;
}
代碼調用openSocket然後調用read返回的插座上。
@downvoter在上面的一些錯誤? – EJP