SIGPIPE ignored before any service starts, and in standalone services

3proxy ignored SIGPIPE only after readconfig(), which starts the
services: a client gone while written to in the meantime killed the
process (as auto's case saw on macOS). Standalone services never ignored
it. Sends pass no MSG_NOSIGNAL, so this is the only guard.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Vladimir Dubrovin 2026-10-23 16:56:41 +03:00
parent 99795d8dfe
commit e13c8d518f
2 changed files with 8 additions and 1 deletions

View File

@ -549,6 +549,11 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int
return 1; return 1;
} }
#ifndef _WIN32
/* before readconfig() starts the services: a client gone while it is
written to is an error, not the end */
signal(SIGPIPE, SIG_IGN);
#endif
_3proxy_mutex_init(&config_mutex); _3proxy_mutex_init(&config_mutex);
_3proxy_mutex_init(&runningservices_mutex); _3proxy_mutex_init(&runningservices_mutex);
_3proxy_mutex_init(&bandlim_mutex); _3proxy_mutex_init(&bandlim_mutex);
@ -608,7 +613,6 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int
signal(SIGCONT, mysigpause); signal(SIGCONT, mysigpause);
signal(SIGTERM, mysigterm); signal(SIGTERM, mysigterm);
signal(SIGUSR1, mysigusr1); signal(SIGUSR1, mysigusr1);
signal(SIGPIPE, SIG_IGN);
cyclestep(); cyclestep();
#endif #endif

View File

@ -1336,6 +1336,9 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int
WSADATA wd; WSADATA wd;
WSAStartup(MAKEWORD( 1, 1 ), &wd); WSAStartup(MAKEWORD( 1, 1 ), &wd);
#else
/* a client gone while it is written to is an error, not the end */
signal(SIGPIPE, SIG_IGN);
#endif #endif
if((res = srvprepare(&s, argc, argv))) return res; if((res = srvprepare(&s, argc, argv))) return res;