私は、無限ループで接続を受け入れるServerSocketを持っています。しかし、私は、接続の受け入れを停止し、ユーザーがプログラムを終了するように要求したときに現在開いている接続の処理を終了したいと思います。ServerSocketタイムアウトとキュー接続
シャットダウンフックを使用して、これ以上の接続を受け付けないというユーザの意図をプログラムが認識できるようにフラグを設定します。ただし、このフラグが設定されるまでには、すでにaccept()でブロックされています。私が次のようなことをした場合:
ServerSocket servsoc = new ServerSocket(port);
servsoc.setSoTimeout(2000);
// Infinite loop processing connections
while (!shutdown) {
do {
try {
connected = true;
socket = servsoc.accept();
} catch (SocketTimeoutException tim) {
connected = false;
}
} while (!shutdown && !connected)
if (connected) {
... remainder of code ...
}
}
キューに入れられた接続がServerSocketによって削除されることはありますか?
これは別の質問です。接続はのキューに入っていますか?
スレッドを中断しても、accept呼び出しからソケットが切断されることはありません。あなたができることは、シャットダウンフラグを設定してサーバソケットへの接続を開き、 "noop"メッセージを送信してacceptループから抜け出す方法です。 – user3745362