Сигнал 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 и тайм-аутом. Это довольно распространено и довольно портативно.