[ 
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:43 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, try to create a server socket and bind to 0:0:0:0:0:0:0:1.
1ba) if succeeds, connect to 127.0.0.1 and retrieve the parameters.
1bb) if fails, create a unconnected socket and retrieve the parameters (which 
might be inaccurate)
2) 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.

> 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.

Reply via email to