[ 
https://issues.apache.org/jira/browse/NET-141?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12863400#action_12863400
 ] 

Wayne Johnson commented on NET-141:
-----------------------------------

I ran into a similar issue when using RCommandClient.  I implemented 
Christian's solution and had two problems.  Noting them here for anyone 
attempting the same.

1) RCommandClient will automatically retry a connect on another port pair on a 
ConnectException in the socket.connect.  This is really a bug in 
RcommandClient.  To get around this I added a catch to Christian's code to 
catch a ConnectException and rethrow it as a IOException.  

2) There is a typo in Christian's code in the method when using InetAddress to 
createSocket().  The code should be

            public Socket createSocket(InetAddress address, int port, 
InetAddress localAddress, int localPort) 
                throws IOException 
            {
                return createSocket(address.getHostName(), port, localAddress, 
localPort);
            }

Note that the original code passed 0 for the localPort when the user had 
specified a localPort.


> Add connection timeout support to SocketClient and/or 
> SocketFactory/DefaultSocketFactory
> ----------------------------------------------------------------------------------------
>
>                 Key: NET-141
>                 URL: https://issues.apache.org/jira/browse/NET-141
>             Project: Commons Net
>          Issue Type: Improvement
>    Affects Versions: 1.4
>            Reporter: Christian Hufgard
>            Assignee: Daniel Savarese
>             Fix For: 2.0
>
>         Attachments: CustomSocketFactory.java
>
>
> Hi,
> If executing the following code
>  String hostname = "localhost";
>  FTPClient client = new FTPClient();
>  client.setDefaultTimeout(1000);
>  client.connect(hostname);
> against a ftp server that ignores the connection attempt (e.g. is 
> firewalled/malfunctoned), there will be no exception after 1000 ms. The 
> exception will be thrown after a default timeout of three minutes. (Three 
> minutes on a debian/ and a suse machines. Might be different on other 
> platforms).
> JavaDoc says:
> public void setDefaultTimeout(int timeout)
>   Set the default timeout in milliseconds to use when opening a socket.
> Digging through the code I found, that DefaultSocketFactory which is used be 
> SocketClient does not care about any value set with this method. It creates a 
> new Socket with Socket(hostname, port) and relies on the VMs behaviour.
> To get this fixed I set a custom SocketFactory with 
> client.setSocketFactory(socketFactory); that uses a timeout for socket 
> connection.
> This bug is also in 1.4.1, but this value is not listed...
> Christian

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