diff --git a/src/share/classes/java/net/DatagramSocket.java b/src/share/classes/java/net/DatagramSocket.java index 31db3393f5cbaa3858886bb95a50c2fad2978fa8..7166c5f93ea2b097fe99529622f9ce993a3aa4ca 100644 --- a/src/share/classes/java/net/DatagramSocket.java +++ b/src/share/classes/java/net/DatagramSocket.java @@ -174,9 +174,7 @@ class DatagramSocket implements java.io.Closeable { * @see SecurityManager#checkListen */ public DatagramSocket() throws SocketException { - // create a datagram socket. - createImpl(); - bind(new InetSocketAddress(0)); + this(new InetSocketAddress(0)); } /** @@ -221,7 +219,12 @@ class DatagramSocket implements java.io.Closeable { // create a datagram socket. createImpl(); if (bindaddr != null) { - bind(bindaddr); + try { + bind(bindaddr); + } finally { + if (!isBound()) + close(); + } } } diff --git a/src/share/classes/java/net/MulticastSocket.java b/src/share/classes/java/net/MulticastSocket.java index 4ec3a2df63c9e81fd1dc084bc701c7f36f8d4da8..bb4760f1184ac478bf865bf325b119f6814b7626 100644 --- a/src/share/classes/java/net/MulticastSocket.java +++ b/src/share/classes/java/net/MulticastSocket.java @@ -162,7 +162,12 @@ class MulticastSocket extends DatagramSocket { setReuseAddress(true); if (bindaddr != null) { - bind(bindaddr); + try { + bind(bindaddr); + } finally { + if (!isBound()) + close(); + } } } diff --git a/src/share/classes/java/net/Socket.java b/src/share/classes/java/net/Socket.java index 0b047e4ef4c2ff003fe7308f3333583199dddb97..d2bdd529f141313e38929db8da42cc3c70135eb1 100644 --- a/src/share/classes/java/net/Socket.java +++ b/src/share/classes/java/net/Socket.java @@ -425,6 +425,10 @@ class Socket implements java.io.Closeable { } catch (IOException e) { close(); throw e; + } finally { + // if bind() or connect threw a runtime exception + if ((localAddr != null && !bound) || (address != null && !connected)) + close(); } }