title: The underlying connection was closed: The server committed a protocol violation. FTP
body: <p>I was uploading my file using below code,it works fine but some time it throws this error"The underlying connection was closed: The server committed a protocol violation" and stop the process ,when i run it again it upload file with out any issue.</p>
  
  <p>One thing i noticed,if i run this process to upload multiple files then i get this error sometime,if i do less than 5 files then it works fine,any idea where and what i have to look in to it.</p>
  
  <p>I was searchin google nothing found solid solution for this,even one of the msdn blog saying its a bug in FTPwebrequest but not sure.</p>
  
  <p>Environment : C# 4.0, IIS FTP Server.</p>
  
  <p>Thanks in Advance</p>
  
  <pre><code>                FileInfo fileInf = new FileInfo(filename);
                  FtpWebRequest reqFTP;
  
                  // Create FtpWebRequest object from the Uri provided
                  reqFTP = (FtpWebRequest)FtpWebRequest.Create
                           (new Uri(path + fileInf.Name));
  
  
                  // Provide the WebPermission Credintials
                   reqFTP.Credentials = new NetworkCredential(user, pwd);
  
                  // By default KeepAlive is true, where the control connection
                  // is not closed after a command is executed.
                  reqFTP.KeepAlive = false;
  
  
                  // Specify the command to be executed.
                  reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
  
                  // Specify the data transfer type.
                  reqFTP.UseBinary = true;
                  reqFTP.Timeout = -1;
                  reqFTP.UsePassive = true;
  
  
                  // Notify the server about the size of the uploaded file
                  reqFTP.ContentLength = fileInf.Length;
  
                  // The buffer size is set to 2kb
                  int buffLength = 4096;
                  byte[] buff = new byte[buffLength];
                  int contentLen;
  
                  // Opens a file stream (System.IO.FileStream) to read the file
                  // to be uploaded
                  FileStream fs = fileInf.OpenRead();
  
  
                  try
                  {
                      // Stream to which the file to be upload is written
                      Stream strm = reqFTP.GetRequestStream();
  
                      // Read from the file stream 2kb at a time
                      contentLen = fs.Read(buff, 0, buffLength);
  
                      // Till Stream content ends
                      while (contentLen != 0)
                      {
                          // Write Content from the file stream to the FTP Upload
                          // Stream
                          strm.Write(buff, 0, contentLen);
                          contentLen = fs.Read(buff, 0, buffLength);
                      }
  
                      // Close the file stream and the Request Stream
                      strm.Close();
                      fs.Close();
                  }
  </code></pre>
  
  <p><strong>Answer</strong></p>
  
  <p>reqFTP.KeepAlive = false; to "True" to get rid of the error in my case.</p>