J'ai un simple serveur qui ressemble à ceci:Comment gérer correctement les signaux lorsque vous utilisez le modèle de fil de travail?
void *run_thread(void *arg) {
// Communicate via a blocking socket
}
int main() {
// Initialization happens here...
// Main event loop
while (1) {
new_client = accept(socket, ...);
pthread_create(&thread, NULL, &run_thread, *thread_data*);
pthread_detach(thread);
}
// Do cleanup stuff:
close(socket);
// Wait for existing threads to finish
exit(0);
)
Ainsi, lorsqu'un SIGINT ou SIGTERM est reçu, je dois sortir de la boucle d'événement pour obtenir le code de nettoyage. De plus, très probablement le thread principal attend l'appel de accept() donc il n'est pas capable de vérifier une autre variable pour voir si elle devrait se casser ;.
La plupart des conseils que j'ai trouvés étaient les suivants: http://devcry.blogspot.com/2009/05/pthreads-and-unix-signals.html (création d'un thread de traitement de signal spécial pour attraper tous les signaux et faire le traitement sur ceux-ci). Cependant, c'est la partie de traitement que je ne peux pas vraiment comprendre: comment puis-je dire au thread principal de revenir de l'appel de accept() et vérifier sur une variable externe pour voir si elle devrait casser ;?
Merci, qui a travaillé. – ipartola