Buduję aplikację, która nasłuchuje zarówno na TCP, jak i UDP, i mam problem z moim mechanizmem zamykania. Kiedy zadzwonię pod numer Thread.interrupt()
na każdym z wątków nasłuchujących, wątek TCP zostanie przerwany ze słuchania, podczas gdy słuchacz UDP nie jest. Aby być konkretnym, wątek TCP używa ServerSocket.accept()
, który po prostu zwraca (bez faktycznego łączenia). Podczas gdy wątek UDP używa DatagramSocket.receive()
i nie wychodzi z tej metody.Przerwanie wątku w DatagramSocket.receive
Czy jest to problem występujący w moim środowisku JRE, systemie operacyjnym lub czy powinienem przejść na numer (Datagram)Socket.close()
?
AKTUALIZACJA: Znalazłem analysis problemu. Potwierdza, że zachowanie nie jest spójne.
Tylko po to, aby pomóc komukolwiek zajmującemu się tym samym problemem: Moje 'ServerSocket.accept()' nie powróciło bez połączenia. Wracał, ponieważ moja przeglądarka (FF4b10) żąda favikonu 3 razy. Jedno z żądań wywołało test Thread.interrupted(). Przejdę do trybu 'close()'. – SEK