TCP 소켓을 통해 하나씩 플로트 배열을 보내고 있습니다. 내 서버 (수신자 - 여러 요청을 동시에 처리하는 프로그램)는 값 0을받을 때까지 데이터를 읽어야합니다. 클라이언트 (보낸 사람)가 연결 한 후 (또는 마지막으로 보낸 값 이후) 10 초 동안 아무 것도 보내지 않으면 나는 서버에 연결하십시오. 이 신호 접근법을 발견했지만 스레드에서 사용하는 것이 최적이 아닌 것 같지만 fork()가 전역 변수를 사용해야하기 때문에 가능성이 큽니다. 함수에 "소켓"매개 변수를 보내야합니다. 그래서 그것을 닫을 수 있고 AFAIK는 이것이 가능하지 않습니다.멀티 스레딩을위한 C 신호 (대체?)
void time_out(int semnal) {
printf("Time out.\n");
close(socket);
exit(1);
}
와 클라이언트가 연결, 또는 뭔가를 전송 될 때마다, 나는이 전화 :
signal(SIGALRM, time_out);
alarm(10);
다른 어떤 옵션 10 초를 계산하고이 타이머를 다시 시작 할 수 있도록해야합니까?
어떤 종류의 I/O 멀티플렉싱 (예 :'epoll')을 사용하고 있다면, 이미 리눅스에서 'timerfd'와 같이 사용할 수있는 네이티브 타이밍 메커니즘이있을 가능성이 높습니다. 시간 초과 등) –
timerfd가 작동하는 방법에 대한 링크 나 작은 예제를 좀 더 구체적으로 작성해 주실 수 있습니까? (예를 들어 Linux 매뉴얼 페이지를 찾았지만 그 예제는 아주 간단하지 않습니다) – NiCU
'timerfd' 매뉴얼 꽤 분명하다. 시간 간격이 다되었을 때 읽을 준비가 된 파일 설명자를 작성합니다. 해당 파일 설명자를 모니터 된 세트에 넣으면 타이머가 시작된시기를 알 수있는 편리한 f}이 있습니다. –