Jan. 17th, 2019

ok, connect to a socket (td-agent here, but it probably doesn't matter):

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...)

Profile

sassa_nf

January 2026

S M T W T F S
    123
45678910
111213141516 17
18192021222324
25262728293031

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 23rd, 2026 11:33 am
Powered by Dreamwidth Studios