andrew-new / mongoose

Automatically exported from code.google.com/p/mongoose
MIT License
0 stars 0 forks source link

mongoose dying from SIGPIPE #20

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
The call to 'send' in the 'push' function should pass the MSG_NOSIGNAL flag 
to send, else it is possible to get a SIGPIPE which kills the application.

Patch:

@@ -1027,7 +1030,7 @@
                } else if (fd != -1) {
                        n = write(fd, buf + sent, k);
                } else {
-                       n = send(sock, buf + sent, k, 0);
+                       n = send(sock, buf + sent, k, MSG_NOSIGNAL);
                }

                if (n < 0)

Original issue reported on code.google.com by caleb.ep...@gmail.com on 5 Mar 2009 at 7:22

GoogleCodeExporter commented 9 years ago
Unfortunately, MSG_NOSIGNAL is not portable. The application must ignore/handle
SIGPIPE in a way it is done in main.c.

Original comment by valenok on 5 Mar 2009 at 8:44

GoogleCodeExporter commented 9 years ago
Sorry for posting to this old bug report, but since it's the only relevant 
search result when searching for "mongoose web server sigpipe" I just wanted to 
add this here for future reference. 
I've been having this problem with a linux build of mongoose 3.0 and it's been 
driving me crazy trying to find out why signal(SIGPIPE, SIG_IGN) is not 
working...

Turns out, if you are debugging your code in gdb, it overrides the signal 
handlers (duh) causing SIGPIPE to no longer be ignored. Finally realised this, 
ran it outside gdb and everything is fine. Entering "handle SIGPIPE nostop" 
fixes problem in gdb.
Thanks for mongoose btw, great project.

Original comment by owen.kal...@gmail.com on 4 Oct 2011 at 12:56

GoogleCodeExporter commented 9 years ago
Thank you, this is good to know.

Original comment by valenok on 4 Oct 2011 at 5:27