mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Trustin Lee (JIRA)" <j...@apache.org>
Subject [jira] Issue Comment Edited: (DIRMINA-386) SocketSessionConfigImpl: initialize() uses "localhost" to bind InetSocketAddress, should use IP instead
Date Mon, 11 Jun 2007 02:41:26 GMT

    [ https://issues.apache.org/jira/browse/DIRMINA-386?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12503262
] 

Trustin Lee edited comment on DIRMINA-386 at 6/10/07 7:41 PM:
--------------------------------------------------------------

Calling socket.getReuseAddress() or other getter methods doesn't throw an IOException even
if the connection attempt failed.  It is because it is still a socket object which is not
connected yet.  I made it sure by running MINA after changing "localhost" to "blahblah".

'new Socket()' fails only when a security manager prohibits the creation of a socket or there's
no file descriptor left.  If the creation fails, it is not because of MINA but because of
the security manager or the host it runs on.

> Can we reach a compromise here? I've tried about a dozen different combinations to get
this code to work when
> overriding the sun.com.dns provider settings, and nothing works. Using a raw Socket is
the only thing that I've found 
> that works properly.

Doesn't changing "localhost" to "127.0.0.1" fix the problem?  Here's what I am thinking of...

1) Try to create a server socket and bind to 127.0.0.1.
1a) if succeeds, connect to 127.0.0.1 and retrieve the parameters
1b) if fails, create a unconnected socket and retrieve the parameters (which might be inaccurate)
2) Repeat step #1 with 0:0:0:0:0:0:0:1 if 127.0.0.1 doesn't work.
3) Provide fallback default values for all parameters (e.g. reuse address, receive/send buffer
size)




 was:
Calling socket.getReuseAddress() or other getter methods doesn't throw an IOException even
if the connection attempt failed.  It is because it is still a socket object which is not
connected yet.  I made it sure by running MINA after changing "localhost" to "blahblah".

'new Socket()' fails only when a security manager prohibits the creation of a socket or there's
no file descriptor left.  If the creation fails, it is not because of MINA but because of
the security manager or the host it runs on.

And the following lines doesn't throw an IOException 

> Can we reach a compromise here? I've tried about a dozen different combinations to get
this code to work when
> overriding the sun.com.dns provider settings, and nothing works. Using a raw Socket is
the only thing that I've found 
> that works properly.

Doesn't changing "localhost" to "127.0.0.1" fix the problem?  Here's what I am thinking of...

1) Try to create a server socket and bind to 127.0.0.1.
1a) if succeeds, connect to 127.0.0.1 and retrieve the parameters
1b) if fails, create a unconnected socket and retrieve the parameters (which might be inaccurate)
2) Repeat step #1 with 0:0:0:0:0:0:0:1 if 127.0.0.1 doesn't work.
3) Provide fallback default values for all parameters (e.g. reuse address, receive/send buffer
size)



> SocketSessionConfigImpl: initialize() uses "localhost" to bind InetSocketAddress, should
use IP instead
> -------------------------------------------------------------------------------------------------------
>
>                 Key: DIRMINA-386
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-386
>             Project: MINA
>          Issue Type: Bug
>          Components: Transport
>    Affects Versions: 1.0.3, 1.1.0
>         Environment: JDK 5/6, Linux, Windows, Solaris
>            Reporter: Kenji Hollis
>             Fix For: 1.0.4, 1.1.1
>
>
> The main issue here is if a programmer has decided to override the DNS entries, or run
the MINA software in a firewalled environment (where DNS is firewalled, for instance), MINA
will throw an "Unresolved Host" IO Exception at line 66 of SocketSessionConfigImpl.java. 
This can flat-out be re-created every time by simply overriding the DNS entry on the local
machine to 127.0.0.1 (resolv.conf).
> Because the "initialize()" function simply binds to localhost to retrieve socket configuration
defaults, there is a better way to approach this.  This method has been tested, and is known
to work.
> Instead of binding to localhost, bind to "127.0.0.1" or "0.0.0.0" as the address.  Binding
to 127.0.0.1 will do the exact same thing, effectively, as looking up localhost.  Ultimately,
this will be a FASTER initialization, as it needs to resolve "localhost" to an IP.  By giving
the system an IP address to begin with, we resolve this issue.
> What I did was created a local private static final String called "LOCALHOST_ADDRESS"
in the top area of the class, and set it to 127.0.0.1.  I then modified line 66 to use LOCALHOST_ADDRESS,
as well as line 73 to use LOCALHOST_ADDRESS on the socket.connect.
> At the company I work for, we were able to recreate the issue of the code NOT working,
and the code WORKING.  By modifying the code to use localhost as 127.0.0.1 or 0.0.0.0, we
got around the DNS lookup failure, and MINA fired right up happily.
> I recommend this fix be added in the next release - both major and minor - for MINA.
 The company I work for is doing performance testing with MINA now, and we may be using it
to replace the main socket functionality if all goes well.  I would like to see this fix in
the next milestone release if at all possible.
> If you need a patch file provided, I would be more than happy to give one!

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message