From: Robert Klemme Date: 2011-05-03T21:47:35+09:00 Subject: Re: @sock.readline no response in ftp.rb On Tue, May 3, 2011 at 11:25 AM, Fengfeng Li wrote: > Hi everyone, > > I'm using ruby 1.8.7 p334 on windows. > > My code below is really simple, but there's something wrong if the ftp > lasts for a long time: > > #code begin > require 'net/ftp' > require 'time' > > ftp = Net::FTP.new("189.41.6.136") > ftp.login("mlog_123_usr", "MLog_123_pwd") > puts Time.now() > puts ftp.list > ftp.putbinaryfile("D:\\version\\XXX.cc")  # here > puts Time.now() > ftp.close > #code end > > My destination host is very slow, so uploading a file(about 5M) can take > about 15 minutes, then ruby.exe cann't exit forever(I see from the host > to make sure the file has been uploaded and there's no existing > ftp-users)! > > If the uploading can be finished in a few seconds, everything is OK. > > I've tried both the 1.8.6&1.8.7 version, they behaved the same way. > > I traced the raw codes in ftp.rb, and found it was stopped when > @sock.readline. > > #ruby code >    def getline >      line = @sock.readline # if get EOF, raise EOFError >      line.sub!(/(\r\n|\n|\r)\z/n, "") >      if @debug_mode >  print "get: ", sanitize(line), "\n" >      end >      return line >    end >    private :getline > #ruby code > > Is it because of my host not giving ruby.exe correct response, or > because of ruby itself? I would assume it to be unlikely that it is a bug in Ruby's FTP library. Rather I would assume that you either have network trouble - or do not wait long enough. Did you try to debug the network with a network monitor (e.g. Wireshark)? Cheers robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/