On 17/12/2019 14:35, Patrick Concannon wrote:
Hi,

Could someone please review my fix and CSR for issue JDK-8235783 'DatagramSocket::disconnect should allow an implementation to throw UncheckedIOException'?

DatagramChannel's connect and disconnect methods throw an IOException while DatagramSocket's corresponding methods do not. The proposed fix changes the specification of DatagramSocket::connect and DatagramSocket::disconnect to document that an implementation may throw UncheckedIOException. In addition, and similar to what was done for DatagramChannel, an @apiNote is added to DatagramSocket::disconnect to recommend closing the socket if an IO exception occurs, as the underlying socket might have been left in an inconsistent and unspecified state

bug: https://bugs.openjdk.java.net/browse/JDK-8235783

CSR: https://bugs.openjdk.java.net/browse/JDK-8236076
webrev: http://cr.openjdk.java.net/~pconcannon/8235783/webrevs/webrev.00/
A couple of things in this area to think about:

1. DatagramSocket connect does nothing when the socket is closed and we might want specify that some day to avoid the reader wondering if UncheckedIOException will be thrown when the socket is closed.

2. DatagramSocket connect will bind the socket is not already bound and we might want to specify that some day. The bind could fail so that is a potential reason for throwing UncheckedIOException (or SecurityException is unlikely scenarios).

3. DatagramSocket.connect silently falls back to emulation when the underlying connect fails. I think this is a bug as it hides a problem like trying to connect to a non-routable addresses, but may have been done this way to avoid incomplete DatagramSocketImpl implementations. I guess my point here is that UncheckedIOException will never be thrown, which might be okay if the primary motive is to prepare DatagramSocket for the new implementation.

4. If you are open to word smithing on the @throws descriptions then I think dropping "by an implementation" will help the wording a bit. Also I think the description should make it clear that the exception cause is the IOException with the underlying I/O error.

-Alan.

Reply via email to