TCPとUDPの両方をリッスンするアプリケーションを構築していますが、シャットダウンメカニズムに問題があります。それぞれのリスニングスレッドでThread.interrupt()
と呼ぶと、TCPスレッドはリッスンが中断されますが、UDPリスナーはリッスンされません。具体的には、TCPスレッドはServerSocket.accept()
を使用します(実際には接続しないで返す)。 UDPスレッドはDatagramSocket.receive()
を使用し、その方法は終了しません。DatagramSocket.receiveのスレッドを中断します
これは私のJRE、私のOSでの問題である、または私はちょうど(Datagram)Socket.close()
に切り替える必要がありますか?
UPDATE:私は、問題のanalysisを見つけました。これは、動作が一貫していないことを確認します。
他の人が同じ問題を扱うのを助けるために、私の 'ServerSocket.accept()'は接続せずに戻っていませんでした。私のブラウザ(FF4b10)がfaviconを3回要求するので、戻ってきました。リクエストの1つがThread.interrupted()チェックをトリッピングしていました。私は 'close()'を使って切り替えます。 – SEK