зеркало из https://github.com/github/ruby.git
* lib/ftp/ftp.rb (Net::FTP#close): close socket more gracefully.
* lib/ftp/ftp.rb (Net::BufferedSocket#shutdown): added. * test/net/ftp/test_ftp.rb (FTPTest#create_ftp_server): wait socket with shutdown and read. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35227 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
d7655cc292
Коммит
bc2ece6cf8
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,12 @@
|
|||
Wed Apr 4 01:48:35 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* lib/ftp/ftp.rb (Net::FTP#close): close socket more gracefully.
|
||||
|
||||
* lib/ftp/ftp.rb (Net::BufferedSocket#shutdown): added.
|
||||
|
||||
* test/net/ftp/test_ftp.rb (FTPTest#create_ftp_server): wait socket
|
||||
with shutdown and read.
|
||||
|
||||
Tue Apr 3 19:00:52 2012 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||
|
||||
* test/net/ftp/test_ftp.rb (FTPTest#create_ftp_server): should wait
|
||||
|
@ -140,7 +149,7 @@ Thu Mar 29 08:25:35 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
|
|||
Thu Mar 29 07:45:36 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
|
||||
|
||||
* ext/openssl/ossl_asn1.c: raise TypeError when trying to encode nil
|
||||
values for Primitive instances.
|
||||
values for Primitive instances.
|
||||
* test/openssl/test_asn1.rb: Assert consistent behavior when
|
||||
encoding nil values: Primitives raise TypeError, Constructives
|
||||
raise NoMethodError.
|
||||
|
|
|
@ -932,7 +932,12 @@ module Net
|
|||
# a new connection with #connect.
|
||||
#
|
||||
def close
|
||||
@sock.close if @sock and not @sock.closed?
|
||||
if @sock and not @sock.closed?
|
||||
@sock.shutdown(Socket::SHUT_WR)
|
||||
@sock.read_timeout = 1
|
||||
@sock.read
|
||||
@sock.close
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
|
@ -1055,7 +1060,7 @@ module Net
|
|||
end
|
||||
|
||||
class BufferedSocket < BufferedIO
|
||||
[:addr, :peeraddr, :send].each do |method|
|
||||
[:addr, :peeraddr, :send, :shutdown].each do |method|
|
||||
define_method(method) { |*args|
|
||||
@io.__send__(method, *args)
|
||||
}
|
||||
|
@ -1067,7 +1072,8 @@ module Net
|
|||
return s.empty? ? nil : s
|
||||
else
|
||||
result = ""
|
||||
while s = super(BUFSIZ, "", true)
|
||||
while s = super(DEFAULT_BLOCKSIZE, "", true)
|
||||
break if s.empty?
|
||||
result << s
|
||||
end
|
||||
return result
|
||||
|
|
|
@ -375,14 +375,10 @@ class FTPTest < Test::Unit::TestCase
|
|||
commands.push(sock.gets)
|
||||
sock.print("150 Opening BINARY mode data connection for foo (#{binary_data.size} bytes)\r\n")
|
||||
conn = TCPSocket.new(host, port)
|
||||
binary_data.scan(/.{1,1024}/nm).each_with_index do |s, i|
|
||||
if i == 1
|
||||
sleep(0.5)
|
||||
else
|
||||
sleep(0.1)
|
||||
end
|
||||
conn.print(s)
|
||||
end
|
||||
sleep(0.1)
|
||||
conn.print(binary_data[0,1024])
|
||||
sleep(0.5)
|
||||
assert_raise(Errno::EPIPE){ conn.print(binary_data[1024, 1024]) }
|
||||
conn.close
|
||||
sock.print("226 Transfer complete.\r\n")
|
||||
}
|
||||
|
@ -406,7 +402,7 @@ class FTPTest < Test::Unit::TestCase
|
|||
assert_equal("RETR foo\r\n", commands.shift)
|
||||
assert_equal(nil, commands.shift)
|
||||
ensure
|
||||
ftp.close if ftp
|
||||
ftp.close unless ftp.closed?
|
||||
end
|
||||
ensure
|
||||
server.close
|
||||
|
@ -591,7 +587,9 @@ class FTPTest < Test::Unit::TestCase
|
|||
sock = server.accept
|
||||
begin
|
||||
yield(sock)
|
||||
sleep 0.1
|
||||
sock.shutdown(Socket::SHUT_WR)
|
||||
sock.read_timeout = 1
|
||||
sock.read unless sock.eof?
|
||||
ensure
|
||||
sock.close
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче