Guess the language
Jan. 17th, 2019 12:53 pmok, connect to a socket (td-agent here, but it probably doesn't matter):
But what if...
You'd expect the socket to be closed, or eventually error on write?
irb(main):005:0>
irb(main):006:0* sock.write('doh')
=> 3
irb(main):007:0> sock.write('doh')
=> 3
irb(main):008:0> sock.write('doh')
=> 3
irb(main):009:0> sock.write('doh')
=> 3
irb(main):010:0> sock.write('doh')
=> 3
irb(main):011:0>
[1]+ Stopped irb
# netstat -nap | grep 59172
tcp 1 15 127.0.0.1:59172 127.0.0.1:8124 CLOSE_WAIT 12727/irb
But we have 15 bytes (5 * 'doh') queued up instead.
irb(main):023:0* sock = TCPSocket.new('localhost', 8124)
=> #
irb(main):024:0> sock.write('doh')
=> 3
irb(main):025:0>
[1]+ Stopped irb
# service td-agent restart
td-agent stop/waiting
td-agent start/running, process 18296
# fg
irb
irb(main):031:0>
irb(main):032:0* sock.write('doh')
=> 3
irb(main):033:0> sock.write('doh') # yes, we've restarted the server, so connection eventually fails
Errno::EPIPE: Broken pipe
from (irb):33:in `write'
from (irb):33
from /usr/bin/irb:11:in `'
irb(main):034:0> sock.write('doh')
Errno::EPIPE: Broken pipe
from (irb):34:in `write'
from (irb):34
from /usr/bin/irb:11:in `'
But what if...
irb(main):001:0> require 'socket'
=> true
irb(main):002:0> sock = TCPSocket.new('localhost', 8124)
=> #
irb(main):003:0> sock.write('doh')
=> 3
irb(main):004:0>
[1]+ Stopped irb
# service td-agent restart
td-agent stop/waiting
td-agent start/running, process 13180
# fg
irb
sleep 60
sleep 60
=> 60
You'd expect the socket to be closed, or eventually error on write?
irb(main):005:0>
irb(main):006:0* sock.write('doh')
=> 3
irb(main):007:0> sock.write('doh')
=> 3
irb(main):008:0> sock.write('doh')
=> 3
irb(main):009:0> sock.write('doh')
=> 3
irb(main):010:0> sock.write('doh')
=> 3
irb(main):011:0>
[1]+ Stopped irb
# netstat -nap | grep 59172
tcp 1 15 127.0.0.1:59172 127.0.0.1:8124 CLOSE_WAIT 12727/irb
But we have 15 bytes (5 * 'doh') queued up instead.
# fg
irb
^[[A
sock.write('doh')
=> 3
irb(main):012:0> sock.write('doh')
=> 3
irb(main):013:0> sock.write('doh')
=> 3
irb(main):014:0> sock.write('doh')
=> 3
irb(main):015:0> sock.write('doh')
=> 3
irb(main):016:0>
[1]+ Stopped irb
# netstat -nap | grep 59172
tcp 1 30 127.0.0.1:59172 127.0.0.1:8124 CLOSE_WAIT 12727/irb
# fg
irb
^[[A
sock.write('doh')
=> 3
irb(main):017:0> sock.write('doh' * 30000)
=> 90000
irb(main):018:0> sock.write('doh' * 30000)
=> 90000
irb(main):019:0> sock.write('doh' * 30000)
=> 90000
irb(main):020:0> sock.write('doh' * 30000000)
^Z
[1]+ Stopped irb
# netstat -nap | grep 59172
tcp 1 2531843 127.0.0.1:59172 127.0.0.1:8124 CLOSE_WAIT 12727/irb
# fg
irb
^Z
[1]+ Stopped irb
# netstat -nap | grep 59172
tcp 1 2531843 127.0.0.1:59172 127.0.0.1:8124 CLOSE_WAIT 12727/irb
# netstat -nap | grep 59172
tcp 1 2531843 127.0.0.1:59172 127.0.0.1:8124 CLOSE_WAIT 12727/irb
# fg
irb
(...chirp...chirp...)