Archived Forum Post

Index of archived forum posts

Question:

C# FTP: Upload speed is decreased when upgrading from 9.2 to 9.5

Apr 29 '14 at 10:30

Hi!

I recently upgraded my FTP component from version 9.2 to version 9.5 (the latest). My problem is, that the upload speed (plain FTP) is now up to 90% lower. With the old version, I got e.g. 32 MByte/sec, now I get 8 MByte/sec - and my users complain about an even larger decrease in speed.

I tried the new parameter SoSndBuf, but the value reported by LastErrorText keeps the same at 8192...

Here is my LastErrorText output:

ChilkatLog:
    Connect_Ftp2:
      DllDate: Apr 19 2014
      ChilkatVersion: 9.5.0.33
      UnlockPrefix: XXX Username: XXX
      Architecture: Little Endian; 32-bit
      Language: .NET 4.5
      VerboseLogging: 0
      ProgressMonitoring:
        enabled: yes
        heartbeatMs: 0
        sendBufferSize: 524288
      --ProgressMonitoring
      ImplicitSsl: 0
      AuthTls: 0
      AuthSsl: 0
      Hostname: lt520
      Port: 21
      IdleTimeoutMs: 60000
      ConnectTimeout: 15
      socketOptions:
        SO_SNDBUF: 8192
        SO_RCVBUF: 8192
        TCP_NODELAY: 1
      --socketOptions
      readCommandResponse:
        replyLineQP: 220-FileZilla Server version 0.9.43 beta
        replyLineQP: 220-written by Tim Kosse (tim.kosse@filezilla-project.org)
        replyLineQP: 220 Please visit http://sourceforge.net/projects/filezilla/
        commandResponse: 220-FileZilla Server version 0.9.43 beta  220-written by Tim Kosse (tim.kosse@filezilla-project.org)  
        220 Please visit http://sourceforge.net/projects/filezilla/
        statusCode: 220
      --readCommandResponse
      initialStatus: 220
      initialResponse: 220-FileZilla Server version 0.9.43 beta  220-written by Tim Kosse (tim.kosse@filezilla-project.org)  220 Please visit http://sourceforge.net/projects/filezilla/      Logging in...      
      Login:
        sendCommand:
          sendingCommand: USER raincoat
        --sendCommand
        readCommandResponse:
          replyLineQP: 331 Password required for raincoat
          commandResponse: 331 Password required for raincoat
          statusCode: 331
        --readCommandResponse
        sendCommand:
          sendingCommand: PASS *
        --sendCommand
        readCommandResponse:
          replyLineQP: 230 Logged on
          commandResponse: 230 Logged on
          statusCode: 230
        --readCommandResponse
        FTP authentication successful.
        setTransferMode:
          sendCommand:
            sendingCommand: TYPE I
          --sendCommand
          readCommandResponse:
            replyLineQP: 200 Type set to I
            commandResponse: 200 Type set to I
            statusCode: 200
          --readCommandResponse
        --setTransferMode
      --Login
      Login successful.
      syst:
        sendCommand:
          sendingCommand: SYST
        --sendCommand
        readCommandResponse:
          replyLineQP: 215 UNIX emulated by FileZilla
          commandResponse: 215 UNIX emulated by FileZilla
          statusCode: 215
        --readCommandResponse
      --syst
      Syst: UNIX emulated by FileZilla
      sendCommand:
        sendingCommand: FEAT
      --sendCommand
      readCommandResponse:
        replyLineQP: 211-Features:
        replyLineQP:  MDTM
        replyLineQP:  REST STREAM
        replyLineQP:  SIZE
        replyLineQP:  MLST type*;size*;modify*;
        replyLineQP:  MLSD
        replyLineQP:  UTF8
        replyLineQP:  CLNT
        replyLineQP:  MFMT
        replyLineQP: 211 End
        commandResponse: 211-Features:   MDTM   REST STREAM   SIZE   MLST type*;size*;modify*;   MLSD   UTF8   CLNT   MFMT  211 End
        statusCode: 211
      --readCommandResponse      Success.
    --Connect_Ftp2
  --ChilkatLog  

Answer

The SoSndBuf property applies to data connections, not to the control connection. The Connect method establishes the control connection for sending FTP commands. When a command to upload or download a file is sent, then a temporary data connection is established and this is the connection where the SoSndBuf socket option is set.

Make sure to set it to a large value, such as 1MB. If you examine the LastErrorText after the method call to upload/download a file, you should see the SoSndBuf value that is used.