I'm building an application that listens on both TCP and UDP, and I've run into some trouble with my shutdown mechanism. When I call Thread.interrupt()
on each of the listening threads, the TCP thread is interrupted from listening, whereas the UDP listener isn't. To be specific, the TCP thread uses ServerSocket.accept()
, which simply returns (without actually connecting). Whereas the UDP thread uses DatagramSocket.receive()
, and doesn't exit that method.
Is this an issue in my JRE, my OS, or should I just switch to (Datagram)Socket.close()
?
UPDATE: I've found an analysis of the problem. It confirms that the behavior is not consistent.
ServerSocket.accept()
wasn't returning without connecting. It was returning because my browser (FF4b10) requests the favicon 3 times. One of the requests was tripping the Thread.interrupted() check.I'll be switching over to usingclose()
. – ElviaelvieServerSocket
to matchDatagramSocket
more or less, but they handle interruptions/socket closure differently. – Elviaelvie