start tracking the 'broken pipe' error

svn:r1261
This commit is contained in:
Roger Dingledine 2004-03-11 20:15:53 +00:00
parent 976bacae94
commit 52e813951a
2 changed files with 5 additions and 0 deletions

View File

@ -253,6 +253,7 @@ int flush_buf(int s, buf_t *buf, int *buf_flushlen)
write_result = send(s, buf->mem, *buf_flushlen, 0); write_result = send(s, buf->mem, *buf_flushlen, 0);
if (write_result < 0) { if (write_result < 0) {
if(!ERRNO_EAGAIN(errno)) { /* it's a real error */ if(!ERRNO_EAGAIN(errno)) { /* it's a real error */
assert(errno != EPIPE); /* get a stack trace to find epipe bugs */
return -1; return -1;
} }
#ifdef MS_WINDOWS #ifdef MS_WINDOWS

View File

@ -631,6 +631,9 @@ static void catch(int the_signal) {
if(options.PidFile) if(options.PidFile)
unlink(options.PidFile); unlink(options.PidFile);
exit(0); exit(0);
case SIGPIPE:
log(LOG_WARN,"Bug: caught sigpipe. Ignoring.");
break;
case SIGHUP: case SIGHUP:
please_reset = 1; please_reset = 1;
break; break;
@ -751,6 +754,7 @@ int tor_main(int argc, char *argv[]) {
#ifndef MS_WINDOWS /* do signal stuff only on unix */ #ifndef MS_WINDOWS /* do signal stuff only on unix */
signal (SIGINT, catch); /* catch kills so we can exit cleanly */ signal (SIGINT, catch); /* catch kills so we can exit cleanly */
signal (SIGTERM, catch); signal (SIGTERM, catch);
signal (SIGPIPE, catch);
signal (SIGUSR1, catch); /* to dump stats */ signal (SIGUSR1, catch); /* to dump stats */
signal (SIGHUP, catch); /* to reload directory */ signal (SIGHUP, catch); /* to reload directory */
signal (SIGCHLD, catch); /* for exiting dns/cpu workers */ signal (SIGCHLD, catch); /* for exiting dns/cpu workers */