Uploaded image for project: 'Commons Net'
  1. Commons Net
  2. NET-552

SocketTimeoutException connecting a FTP server via an HTTP Proxy

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.3
    • 3.4
    • FTP
    • All

    Description

      Randomly, we're experiencing SocketTimoutException when we connect an FTP via an Http Proxy :

      java.io.IOException: Timed out waiting for initial connect reply
      	at org.apache.commons.net.ftp.FTP._connectAction_(FTP.java:403)
      	at org.apache.commons.net.ftp.FTPClient._connectAction_(FTPClient.java:931)
      	at org.apache.commons.net.ftp.FTPClient._connectAction_(FTPClient.java:925)
      	at org.apache.commons.net.ftp.FTPHTTPClient.connect(FTPHTTPClient.java:144)
      Caused by: java.net.SocketTimeoutException: Read timed out
      	at java.net.SocketInputStream.socketRead0(Native Method)
      	at java.net.SocketInputStream.read(SocketInputStream.java:150)
      	at java.net.SocketInputStream.read(SocketInputStream.java:121)
      	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
      	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
      	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
      	at java.io.InputStreamReader.read(InputStreamReader.java:184)
      	at java.io.BufferedReader.fill(BufferedReader.java:161)
      	at java.io.BufferedReader.read(BufferedReader.java:182)
      	at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58)
      	at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:315)
      	at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:295)
      	at org.apache.commons.net.ftp.FTP._connectAction_(FTP.java:397)
      	... 6 more
      

      After analysis, I think the problem is that commons-net opens 2 BufferedReader on the same InputStream : first in the FTPHTTPClient.tunnelHandshake method, and the second in FTP._connectAction() method.
      If the first BufferedReader reads all datas in the socket, the second waits until SocketTimeout.

      Attachments

        1. ftp.patch
          4 kB
          Quentin Devriendt

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            qdevriendt Quentin Devriendt
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment