reading on sockets when connection breaks

Frederick Damen damenf at motcid.UUCP
Wed Dec 12 04:50:11 AEST 1990


In article <1990Dec6.055353.23846 at Think.COM> barmar at think.com (Barry Margolin) writes:
>If you're willing to assume that incommunicado means dead you can use a
>keepalive, an empty packet that is sent periodically in order to elicit an
>acknowledgement.  If you're using Unix sockets, the SO_KEEPALIVE option can
>be enabled to automate this.

After RTFMs, I have a few questions and assumptions that need confirming:

1) After reading some related information on SIGPIPE and running a test program
   it seems as though SIGPIPE is only raised on a pipe/socket that has been 
   written to.  In most/all the documentation on SIGPIPE that I have seen 
   it always refers to writing to the pipe/socket.  In test program that I 
   have written the read(2) command will return a 0 if there has not been any
   writes to that end of the socket, the read(2) command will cause a SIGPIPE
   if that end of the socket has been previously written to. This happens with
   or without SO_KEEPALIVE set.

   Q: Is SIGPIPE only raised for the end of the socket/pipe that has been written to?

2) SunOS 4.0.1 man page for setsockopt(2) Says: 
                                SO_KEEPALIVE enables the periodic
     transmission of messages on a connected socket.  Should  the
     connected  party fail to respond to these messages, the con-
     nection is considered broken and processes using the  socket
     are notified using a SIGPIPE signal.

   Q: What is the period of these messages?
   Q: When is the SIGPIPE sent:
         After n(n=1) messages are not responded to?
         When the next I/O operation is performed on this socket after a nonresponce?
   Q: Define processess *using* the socket.
      Is this:
         Processes that have written to the socket?
         Processes that have an open file descriptor for this socket?
         Processes at both ends of socket connection?
         Processes that are currently performing and I/O operation on the socket?

3) After the signal handler for SIGPIPE is called how do/should you tell which
   socket caused the SIGPIPE?

I am on a Sun 3/80 running SunOS 4.0.1.  I am using AF_INET, SOCK_STREAM.  I have
RTFM and then some.  I have written some programs usings sockets and understand(?)
the basics.

Thanks in advance for any answers or rtfm(references to f___ manuals) that might
be more enlighting.

Fred
-- 
Fred Damen                                    1501 W. Shure Drive
Motorola, Inc.                                Arlington Heights, IL 60004
Cellular Infrastructure Division              708 632-4641
...!uunet!motcid!damenf



More information about the Comp.unix.questions mailing list