@sock.readline no response in ftp.rb

F

Fengfeng Li

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?

Thanks a lot.
 
R

Robert Klemme

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 =3D 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") =A0# 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
=A0 =A0def getline
=A0 =A0 =A0line =3D @sock.readline # if get EOF, raise EOFError
=A0 =A0 =A0line.sub!(/(\r\n|\n|\r)\z/n, "")
=A0 =A0 =A0if @debug_mode
=A0print "get: ", sanitize(line), "\n"
=A0 =A0 =A0end
=A0 =A0 =A0return line
=A0 =A0end
=A0 =A0private :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

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

tcp socket error 0
FTP problem under Linux? 0
How to fetch Cookie from response 2
Anybody tell me about net/ftp protocol ? 2
Does Ruby's FTP lib have a ghostly bug? 16
Error using net::ftp 1
Help - Linux? 10
IP FTP 0

Members online

Forum statistics

Threads
473,969
Messages
2,570,161
Members
46,705
Latest member
Stefkari24

Latest Threads

Top