Witam,
Tworzę dla siebie prosty serwer (wielu klientów + serwer). Przykładowo, jeden z klientów umiera. Serwer otrzymuje sygnał SIGPIPE, nie kończy pracy ponieważ sygnał został przechwycony.

Co w takiej sytuacji należy zrobić?

Intuicja podpowiadała mi, że:

  • zabić wątek
  • zamknąć socket
  • powiedzieć reszcie programu, że ten wątek już nie pracuje i inny klient może zająć jego miejsce

W praktyce jednak, gdy przykładowo zamykam gnazdo klienta, który spowodował SIGPIPE wykrzacza mi się cała aplikacja i lepiej pozostawić to bez obsługi - wydaje mi się to bardzo dziwne. Przykładowo, po wykonaniu close w odrębie wątka który dostał SIGPIPE (wiem dzięki pthread_self()) zamknęła mi się aplikacja klienta, z którym wszystko w porządku.

Jak typowi programiści postępują z SIGPIPE w aplikacjach sieciowych w C korzystających z POSIX Threads?

Pozdrawiam,