Hello. Is SO_NOSIGPIPE work?
It try to set on socket option SO_NOSIGPIPE but anyway process received sigpipe. Test case: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <signal.h> #define SERVER_PORT 8000 void sigpipe(int signo __unused) { printf("SIGPIPE recivied\n"); } int main(int argc, char *argv[]) { int s , c; int on = 1; socklen_t slen, c_len; struct sockaddr_in serv_addr, client_addr; if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) err(1, "socket() failed"); bzero(&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); serv_addr.sin_port = htons(SERVER_PORT); if (bind(s, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) err(1, "bind() failed"); if (listen(s, -1) < 0) err(1, "listen() failed"); (void)signal(SIGPIPE, sigpipe); for (;;) { if ((c = accept(s, (struct sockaddr *)&client_addr, &c_len)) < 0) { warn("accept() failed"); continue; } if (setsockopt(c, SOL_SOCKET, SO_NOSIGPIPE, (void *)&on, sizeof(on)) < 0) err(1, "setsockopt(SOL_SOCKET, SO_NOSIGPIPE) failed"); sleep(2); if (write(c, "abc", strlen("abc")) < 0) warn("first write() failed"); if (write(c, "\r\n", strlen("\r\n")) < 0) warn("second write() failed"); close(c); } } Client connect, than disconnect. server print: SIGPIPE recivied a.out: second write() failed: Broken pipe Is SO_NOSIGPIPE broken, or something wrong in my code? system: 6.2-STABLE FreeBSD 6.2-STABLE #0: Mon Feb 19 17:07:12 MSK 2007 -- WBR, Anton Yuzhaninov