On Jan 22, 2007, at 10:59 PM, Marc Soda wrote:
> First, thanks for your answer.  I agree with you, however, my
> understanding was that after the client side kernel flushes it's
> buffers from the second send(2) (the first send after the server dies)
> the server would send a RST back.  If I were to go about other
> processing and not even touch the socket again I should still receive
> and SIGPIPE.  Is this not true?

The SIGPIPE is sent when you attempt to write to the socket, not when
the kernel receives the RST.  So in your example, the timeline looks  
like:

client			server
------------------------------
                         listen
connect			
                         accept
                         abort
         <-----------FIN
write
sleep
      |  'hello' -------->
      |  <----------- RST
write: SIGPIPE


That is a pretty lame diagram but I hope it clarifies things.

FYI, this is a behavior of the underlying socket abstraction, not
something particular to Ruby.


Gary Wright