私はここで難問に陥っています…</p>
私のクライアント SSLSocket はサーバー (Java ではない) に接続し、期待どおりにバイナリ データを正常に読み書きします。その後、ある時点で、サーバーはクライアントの接続を切断します。ただし、クライアントは例外をスローせずに呼び出すことができ、すべて 0 の IP を返すstartHandshake()
ことを除いて、接続が切断されたことを示す兆候は見られません。getLocalSocketAddress()
コードは次のようになります。
SSLSocket socket = (SSLSocket)socketFactory.createSocket(host, port);
socket.setTcpNoDelay(true);
socket.setKeepAlive(true);
/* Socket happily sends/receives data */
socket.getOutputStream().write(myData);
socket.getOutputStream().flush();
socket.getInputStream().read(myBuffer);
// do something with myBuffer
Thread.sleep(20 * 1000); // During this wait period, server disconnects the client
socket.getLocalSocketAddress(); // returns host:port as expected
socket.startHandshake(); // doing another read/write will also produce the same result
socket.getLocalSocketAddress(); // returns an IP of all zeroes: /0:0:0:0:0:0:1129:6a1f%0:51447
socket.isClosed(); // somehow, returns false!
socket.isConnected(); // somehow, returns true!
socket.getOutputStream.write(myOtherData); // throws a SocketException: Broken pipe.
基本的に、私の質問は、サーバーがgetLocalSocketAddress()
すべて 0 の IP を持っているかどうかを確認する以外に、サーバーが接続を切断したかどうかを判断する方法があると思いますか?