dev@glassfish.java.net

Re: [FYI] More frequent BindException to occur

From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
Date: Fri, 30 Oct 2009 14:17:27 -0400

Salut,

Jerome Dochez wrote:
> Jean Francois,
>
> I think we have a problem...
> I remember this created an enormous amount of pain in the past.

Yes it will most probably.

>
> There is something I don't quite understand, please clarify :
>
> - you allow to bind to an existing port.
> - on windows, if he port is used by tomcat

   ..if the port is occupied (not only a Java program)

, you say nothing which seems
> consistent with the above statement

Indeed. On win32 we bind event if the port is currently in use (hence
the issue).

> - on unixes, you fail with SEVERE: doSelect IOException

Yes, the JDK fail to bind.

>
> java.net.BindException: Address already in use:
>
>
> why do you fail on unix if you allow to bind to an existing port ?

The JDK fail => Grizzly cannot control that part. In short, Win32 allow
you to blindly bind, where Unix don't, always checking the socket state
whatever the state is. Win32 seems to allow you to bing on "temporary
state".

>
>
> can you also clarify also what is the messy part of doing something
> special for win32.

I can grab the OS via System.getProperty("os.name") and only turn of
reuseAddress for win32. But that's messy as GF will not re-act the same
based on the OS.

A+

-- Jeanfrancois


>
> thanks, jerome
>
>
>
> On Oct 30, 2009, at 10:45 AM, Jeanfrancois Arcand wrote:
>
>> Salut,
>>
>> in order to fix Issue 10690 for win32 users:
>>
>> * http://is.gd/4Il5u
>>
>> I've turned off the java.net.Socket.setReuseAddress()
>>
>> * http://is.gd/4Ilnw
>>
>> for all TCP listeners (8181,4848,8080,3700,7676) independent of the OS
>> (will be a little messy if I do it only for win32)
>>
>> The effect you will notice once 1.9.18-f gets integrated is doing:
>>
>> java -jar glassfish.jar
>> CTRL-C
>> java -jar glassfish.jar
>>
>> will produce a BindException and GF will not start. The reason is the
>> underlying OS may takes some times to release a TCP port, and since we
>> no longer allow binding on an existing port, it can/will produce that
>> exception.
>>
>> Unfortunately, it may breaks some existing tests who stop/start
>> listeners too fast.
>>
>> A+
>>
>> -- Jeanfrancois
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>> <mailto:dev-unsubscribe_at_glassfish.dev.java.net>
>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>> <mailto:dev-help_at_glassfish.dev.java.net>
>>
>