summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-05-21 02:27:07 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-05-21 02:27:07 +0000
commit52f0c6780e5abd58a68befdbf14a6a065161bf8d (patch)
tree52a2a694c6a15767bb4cd783121af07405b86f7c /lib
parentd795f2d1a803c03a7180f6f5049d3a9a0e8849f0 (diff)
* lib/net/ftp.rb (Net::FTP#transfercmd): rescue shutdown.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/net/ftp.rb23
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb
index 3684d1ebf4..8694b09063 100644
--- a/lib/net/ftp.rb
+++ b/lib/net/ftp.rb
@@ -433,7 +433,7 @@ module Net
end
conn = BufferedSocket.new(sock.accept)
conn.read_timeout = @read_timeout
- sock.shutdown(Socket::SHUT_WR)
+ sock.shutdown(Socket::SHUT_WR) rescue nil
sock.read rescue nil
sock.close
end
@@ -483,16 +483,19 @@ module Net
def retrbinary(cmd, blocksize, rest_offset = nil) # :yield: data
synchronize do
with_binary(true) do
- conn = transfercmd(cmd, rest_offset)
- loop do
- data = conn.read(blocksize)
- break if data == nil
- yield(data)
+ begin
+ conn = transfercmd(cmd, rest_offset)
+ loop do
+ data = conn.read(blocksize)
+ break if data == nil
+ yield(data)
+ end
+ conn.shutdown(Socket::SHUT_WR)
+ conn.read_timeout = 1
+ conn.read
+ ensure
+ conn.close
end
- conn.shutdown(Socket::SHUT_WR)
- conn.read_timeout = 1
- conn.read
- conn.close
voidresp
end
end