Javaアプリケーションでソケットタイムアウトを設定しようとしています。開発者の中にはOS Xを搭載しているものもあれば、Windows上にいるものもあります。この問題は、SocketExceptionが発生したWindowsマシンで発生します。タイムアウトが設定されているかどうかに関係なく、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