From e13c8d518f82a64b1dcc0ded165785af97d6faa4 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Fri, 23 Oct 2026 16:56:41 +0300 Subject: [PATCH] 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 --- src/3proxy.c | 6 +++++- src/proxymain.c | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/3proxy.c b/src/3proxy.c index c2a7ce0..1f6d41e 100644 --- a/src/3proxy.c +++ b/src/3proxy.c @@ -549,6 +549,11 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int 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(&runningservices_mutex); _3proxy_mutex_init(&bandlim_mutex); @@ -608,7 +613,6 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int signal(SIGCONT, mysigpause); signal(SIGTERM, mysigterm); signal(SIGUSR1, mysigusr1); - signal(SIGPIPE, SIG_IGN); cyclestep(); #endif diff --git a/src/proxymain.c b/src/proxymain.c index d7ba248..9b84206 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -1336,6 +1336,9 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int WSADATA 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 if((res = srvprepare(&s, argc, argv))) return res;