В констуркторе класса у меня следующие строчки:
sigset_t sset;
::sigfillset(&sset);
::sigdelset(&sset, SIGINT);
::sigprocmask(SIG_SETMASK, &sset, 0);
struct sigaction sa;
sa.sa_handler = Server::finishWork;
sa.sa_flags = SA_INTERRUPT;
sa.sa_mask = sset;
::sigaction(SIGINT, &sa, 0);
обработчик для сигнала сейчас выглядит так ( за cout не бейте ):
static void finishWork(int) {
std::cout << "YES!\n";
isFinished_ = true;
}
Смысл в том, что запускаются два потока: один получает сообщения по именованному каналу и кладет их в очередь, а другой вынимает. В том потоке, что принимает сообщения есть select ( менял на poll). Этот select бесконечный.
Надежда была на то, что при получении сигнала select прервется, однако этого не происходит...