Date: Thu, 1 Mar 2007 15:17:29 +0300 From: Anton Yuzhaninov <citrin@citrin.ru> To: freebsd-net@freebsd.org Subject: is setsockopt SO_NOSIGPIPE work? Message-ID: <2110071423.20070301151729@citrin.ru>
next in thread | raw e-mail | index | archive | help
This is a cryptographically signed message in MIME format. ------------EA1EE1A83EA702A6 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable 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 =3D 1; socklen_t slen, c_len; struct sockaddr_in serv_addr, client_addr; if ((s =3D socket(PF_INET, SOCK_STREAM, 0)) < 0) err(1, "socket() failed"); bzero(&serv_addr, sizeof(serv_addr)); serv_addr.sin_family =3D AF_INET; serv_addr.sin_addr.s_addr =3D htonl(INADDR_LOOPBACK); serv_addr.sin_port =3D 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 =3D 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 --=20 WBR, Anton Yuzhaninov ------------EA1EE1A83EA702A6--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2110071423.20070301151729>