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