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