Сигнал C (альтернатива?) Для многопоточности

Я посылаю массив с плавающей точкой, один за другим, через сокет TCP. Мой сервер (получатель - который обрабатывает несколько запросов одновременно) должен считывать данные до тех пор, пока не будет получено значение 0. Если клиент (отправитель) ничего не отправляет в течение 10 секунд после его подключения (или после последнего отправленного значения), я хочу сервер, чтобы закрыть это соединение. Я нашел этот подход к сигналу, но я думаю, что он не будет оптимальным для использования в потоках, а скорее для fork(), потому что он заставляет меня использовать глобальные переменные. Я должен отправить параметр "socket" в функцию, чтобы я мог закрыть его и AFAIK это невозможно.

void time_out(int semnal) {
  printf("Time out.\n");
  close(socket);
  exit(1);
}

и каждый раз, когда клиент подключается или отправляет что-то, я называю это:

signal(SIGALRM, time_out);
alarm(10);

Какие еще опции мне нужно считать 10 секунд и чтобы можно было перезапустить этот таймер?

1 ответ

Решение

Вы можете использовать select с пустым набором FD и тайм-аутом. Это довольно распространено и довольно портативно.

Другие вопросы по тегам