Sigh. Hopefully this is the last webrev.

http://cr.openjdk.java.net/~michaelm/7085981/webrev.4/

Socket.java changed from last one. If there's no objection
I'll push this version.

- Michael.

On 08/09/11 15:20, Salter, Thomas A wrote:
Doesn't the socket get created by the createImpl before the bind in the Socket 
constructor?  Then bind or connect might throw an IllegalArgumentException.


     private Socket(SocketAddress address, SocketAddress localAddr,
                    boolean stream) throws IOException {
         setImpl();

         // backward compatibility
         if (address == null)
             throw new NullPointerException();

         try {
             createImpl(stream);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             if (localAddr != null)
                 bind(localAddr);
             if (address != null)
                 connect(address);
         } catch (IOException e) {
             close();
             throw e;
         }
     }

-----Original Message-----
From: Michael McMahon [mailto:michael.x.mcma...@oracle.com]
Sent: Thursday, September 08, 2011 4:11 AM
To: chris hegarty
Cc: Salter, Thomas A; net-dev@openjdk.java.net
Subject: Re: Datagram socket leak

On 07/09/11 21:54, chris hegarty wrote:
On 07/09/2011 17:24, Michael McMahon wrote:
Hi all,

I've posted a webrev for this at:

http://cr.openjdk.java.net/~michaelm/7085981/webrev.1/

After checking Socket and ServerSocket, I believe they are not actually
affected by this issue. The IllegalArgumentExceptions are thrown
before the
impl is created in both cases.
Sorry Michael, I don't see this. It looks like the impl is create in
the private Socket before bind is called, then bind can throw IAE. Or
have I missed something.

Trivially, the no-args constructor can call this(new
InetSocketAddress(0)). I just noticed that these are the same.

-Chris.

Chris,

The impl is set but the socket is not created until impl.create() is called.

- Michael.


Reply via email to