Richard W.M. Jones wrote:
On Thu, Sep 17, 2009 at 04:44:11PM +0200, Jim Meyering wrote:
...
> Second, I saw this in the context:
>
> > /* Make sure SIGPIPE doesn't kill us. */
> > memset (&sa, 0, sizeof sa);
> > sa.sa_handler = SIG_IGN;
>
> Have you considered alternate ways of ignoring SIGPIPE?
> Ignoring SIGPIPE across the board can cause problems (albeit subtle)
> in unsuspecting child processes.
I didn't know there were alternate ways to ignore SIGPIPE. Can you
give some examples of how it should be done? (Possibly in a new
thread -- seems a separate issue from the patch at hand).
Depending on portability (this is mandated by POSIX 2006 and in glibc
long before then), and context (sockets) you can use the MSG_NOSIGNAL flag:
The SIGPIPE signal shall be sent to a thread that attempts to send data on
a socket that is no longer able to send (one that is no longer connected),
except that the signal is suppressed if the MSG_NOSIGNAL flag is used
in calls to send(), sendto(), and sendmsg().
From "Socket Types" in
http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#t...