Skip to content

Instantly share code, notes, and snippets.

@koshigoe
Created December 10, 2019 10:20
Show Gist options
  • Save koshigoe/f09862b0e06dba7f5d72b729383bfbc9 to your computer and use it in GitHub Desktop.
Save koshigoe/f09862b0e06dba7f5d72b729383bfbc9 to your computer and use it in GitHub Desktop.
Ruby の Net::FTP#put で例外が発生するとコネクションを閉じない?
require 'net/ftp'
def upload
ftp = Net::FTP.new
ftp.read_timeout = 0.1
ftp.passive = true
ftp.connect('localhost')
ftp.login('user', 'pass')
i = 0
ftp.put(__FILE__, '/uploaded', 1) do |data|
i += 1
raise 'Bomb' if i > 3
end
rescue => e
puts e.message
ensure
unless ftp.closed?
ftp.close
puts 'closed.'
end
end
11.times { upload }
puts 'wait'
loop {}
__END__
$ docker run --rm \
-p 20-21:20-21 \
-p 21100-21110:21100-21110 \
-e FTP_USER=user \
-e FTP_PASS=pass \
-e PASV_ADDRESS=localhost \
-e PASV_MIN_PORT=21100 \
-e PASV_MAX_PORT=21110 \
fauria/vsftpd
$ ruby test.rb
Bomb
closed.
Net::ReadTimeout with #<Socket:fd 11>
closed.
Net::ReadTimeout with #<Socket:fd 11>
closed.
Net::ReadTimeout with #<Socket:fd 11>
closed.
Net::ReadTimeout with #<Socket:fd 11>
closed.
Net::ReadTimeout with #<Socket:fd 11>
closed.
Net::ReadTimeout with #<Socket:fd 11>
closed.
Net::ReadTimeout with #<Socket:fd 11>
closed.
Net::ReadTimeout with #<Socket:fd 11>
closed.
Net::ReadTimeout with #<Socket:fd 11>
closed.
Net::ReadTimeout with #<Socket:fd 11>
closed.
wait
$ lsof -i:21100-21110
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 1354 koshigoe 17u IPv6 0x370c967258b56c15 0t0 TCP *:21110 (LISTEN)
com.docke 1354 koshigoe 19u IPv6 0x370c967258b543d5 0t0 TCP *:21109 (LISTEN)
com.docke 1354 koshigoe 21u IPv6 0x370c967258b56095 0t0 TCP *:21108 (LISTEN)
com.docke 1354 koshigoe 23u IPv6 0x370c967258b55515 0t0 TCP *:21107 (LISTEN)
com.docke 1354 koshigoe 25u IPv6 0x370c967258b53e15 0t0 TCP *:21106 (LISTEN)
com.docke 1354 koshigoe 29u IPv6 0x370c967258b571d5 0t0 TCP *:21105 (LISTEN)
com.docke 1354 koshigoe 31u IPv6 0x370c967256ed8e15 0t0 TCP *:21104 (LISTEN)
com.docke 1354 koshigoe 33u IPv6 0x370c967256edb095 0t0 TCP *:21103 (LISTEN)
com.docke 1354 koshigoe 35u IPv6 0x370c967256edaad5 0t0 TCP *:21102 (LISTEN)
com.docke 1354 koshigoe 37u IPv6 0x370c967256ed93d5 0t0 TCP *:21101 (LISTEN)
com.docke 1354 koshigoe 39u IPv6 0x370c967256ed9f55 0t0 TCP *:21100 (LISTEN)
com.docke 1354 koshigoe 45u IPv6 0x370c967256eda515 0t0 TCP localhost:21105->localhost:61667 (ESTABLISHED)
com.docke 1354 koshigoe 47u IPv6 0x370c967257775655 0t0 TCP localhost:21109->localhost:61669 (ESTABLISHED)
com.docke 1354 koshigoe 49u IPv6 0x370c967257772855 0t0 TCP localhost:21107->localhost:61671 (ESTABLISHED)
com.docke 1354 koshigoe 51u IPv6 0x370c9672434ea655 0t0 TCP localhost:21104->localhost:61673 (ESTABLISHED)
com.docke 1354 koshigoe 53u IPv6 0x370c9672434e9515 0t0 TCP localhost:21106->localhost:61675 (ESTABLISHED)
com.docke 1354 koshigoe 55u IPv6 0x370c967241a2b095 0t0 TCP localhost:21110->localhost:61677 (ESTABLISHED)
com.docke 1354 koshigoe 57u IPv6 0x370c967241a2b655 0t0 TCP localhost:21102->localhost:61679 (ESTABLISHED)
com.docke 1354 koshigoe 59u IPv6 0x370c967241a2c1d5 0t0 TCP localhost:21100->localhost:61681 (ESTABLISHED)
com.docke 1354 koshigoe 61u IPv6 0x370c96725927f995 0t0 TCP localhost:21101->localhost:61683 (ESTABLISHED)
com.docke 1354 koshigoe 63u IPv6 0x370c967259281095 0t0 TCP localhost:21103->localhost:61689 (ESTABLISHED)
com.docke 1354 koshigoe 65u IPv6 0x370c967258b55ad5 0t0 TCP localhost:21108->localhost:61693 (ESTABLISHED)
ruby 75273 koshigoe 13u IPv6 0x370c9672385ae1d5 0t0 TCP localhost:61667->localhost:21105 (ESTABLISHED)
ruby 75273 koshigoe 14u IPv6 0x370c967256ed8855 0t0 TCP localhost:61669->localhost:21109 (ESTABLISHED)
ruby 75273 koshigoe 15u IPv6 0x370c967257773f55 0t0 TCP localhost:61671->localhost:21107 (ESTABLISHED)
ruby 75273 koshigoe 16u IPv6 0x370c9672434eac15 0t0 TCP localhost:61673->localhost:21104 (ESTABLISHED)
ruby 75273 koshigoe 17u IPv6 0x370c9672434e8f55 0t0 TCP localhost:61675->localhost:21106 (ESTABLISHED)
ruby 75273 koshigoe 18u IPv6 0x370c9672434e7855 0t0 TCP localhost:61677->localhost:21110 (ESTABLISHED)
ruby 75273 koshigoe 19u IPv6 0x370c967241a2aad5 0t0 TCP localhost:61679->localhost:21102 (ESTABLISHED)
ruby 75273 koshigoe 20u IPv6 0x370c967241a29995 0t0 TCP localhost:61681->localhost:21100 (ESTABLISHED)
ruby 75273 koshigoe 21u IPv6 0x370c96725927ee15 0t0 TCP localhost:61683->localhost:21101 (ESTABLISHED)
ruby 75273 koshigoe 22u IPv6 0x370c967259281c15 0t0 TCP localhost:61689->localhost:21103 (ESTABLISHED)
ruby 75273 koshigoe 23u IPv6 0x370c967258b56655 0t0 TCP localhost:61693->localhost:21108 (ESTABLISHED)
sh-4.1# ps aux | grep '[v]sftpd'
root 1 0.0 0.0 11368 2440 ? Ss 09:01 0:00 /bin/bash -ex /usr/sbin/run-vsftpd.sh
root 13 0.0 0.1 52184 3864 ? S 09:01 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3158 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3160 0.0 0.0 56684 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3161 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3163 0.0 0.0 56608 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3164 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3166 0.0 0.0 56608 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3167 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3169 0.0 0.0 56608 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3170 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3172 0.0 0.0 56608 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3173 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3175 0.0 0.0 56608 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3176 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3178 0.0 0.0 56608 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3179 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3181 0.0 0.0 56608 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3182 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3184 0.0 0.0 56608 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3185 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3187 0.0 0.0 56608 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 3188 0.0 0.1 56584 3564 ? Ss 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 3190 0.0 0.0 56608 2432 ? S 09:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment