summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-05-27 15:14:59 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-05-27 15:14:59 +0000
commit569ca78e9719f147fb54a9d337a629181ca0e243 (patch)
tree906be9ba25109833425bccd54c8a1cb1b3e14001 /lib
parentc968f908e177e0a216dd6d0a45ee72b19a3b26a0 (diff)
* lib/net/ftp.rb (transfercmd): Close TCP server socket even if an
exception occur. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46182 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/net/ftp.rb31
1 files changed, 17 insertions, 14 deletions
diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb
index 5ebf262185..eabe6f5f08 100644
--- a/lib/net/ftp.rb
+++ b/lib/net/ftp.rb
@@ -420,23 +420,26 @@ module Net
end
else
sock = makeport
- if @resume and rest_offset
- resp = sendcmd("REST " + rest_offset.to_s)
- if resp[0] != ?3
+ begin
+ if @resume and rest_offset
+ resp = sendcmd("REST " + rest_offset.to_s)
+ if resp[0] != ?3
+ raise FTPReplyError, resp
+ end
+ end
+ resp = sendcmd(cmd)
+ # skip 2XX for some ftp servers
+ resp = getresp if resp[0] == ?2
+ if resp[0] != ?1
raise FTPReplyError, resp
end
+ conn = BufferedSocket.new(sock.accept)
+ conn.read_timeout = @read_timeout
+ sock.shutdown(Socket::SHUT_WR) rescue nil
+ sock.read rescue nil
+ ensure
+ sock.close
end
- resp = sendcmd(cmd)
- # skip 2XX for some ftp servers
- resp = getresp if resp[0] == ?2
- if resp[0] != ?1
- raise FTPReplyError, resp
- end
- conn = BufferedSocket.new(sock.accept)
- conn.read_timeout = @read_timeout
- sock.shutdown(Socket::SHUT_WR) rescue nil
- sock.read rescue nil
- sock.close
end
return conn
end