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

Kenji Hollis commented on DIRMINA-386:
--------------------------------------

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

You would think so, wouldn't you!  But, no.  The reason it doesn't work is 
because it's expecting to be able to get a DNS entry for both the connecting 
and connected IP addresses from what I can determine.  If it cannot do this, 
then the system will throw a SocketClosedException, which renders the socket 
useless: you cannot perform a socket option check on a socket that is not 
connected.  Binding to :1 is effectively the same as creating a ServerSocket 
with a port bind on port 0, and letting the ServerSocket choose the interface 
to bind to.

The official "fallback" functionality will definitely work in this case, 
however.  Creating a new Socket() to do the "dirty work" will provide "close 
enough" options for the program to use.  If there are any socket options that 
don't make sense (ie. receive/send buffers are tiny), these can be overridden 
using system defaults or letting the programmer choose to do so.  But providing 
an ultimate "safety harness" to create a socket with the least acceptable 
parameters makes the most sense here, methinks.

Kinda makes you wonder why they handle it differently in Linux...

> 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