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,