소켓 프로그램을 짤때 타이머 사용하는 법 좀 가르쳐 주세요.

익명 사용자의 이미지

소켓프로그램에서 서버가 클라이언트에게 어떤 메세지를 보낸 뒤...

5초를 기다리다가 그 전에 메세지가 오면 그 메세지를 출력하고..

5초내에 메세지가 오지 않으면 메세지를 전송하라는 명령을 클라이언트측에게

보내는 기능을 구현하려고 하는데...

어떻게 할 지 모르겠습니다.

타이머함수 setitimer, alarm, select등을 사용해 봤는데..

5초내에 메세지가 온 사실만 알고 , 그 메세지를 버퍼에 저장해서 출력하지는

못하더군요

어떻게 프로그램을 짜면 될까요?

꼭 좀 대답해 주세요..

익명 사용자의 이미지

select()를 사용하면..
시간내에 안오면 메세지 보내라고 하시고...
시간내에 오면는 IS_FDSET()을 사용하여..
해당 socket에 recv이벤트가 발생하면 이것이 참값을 가지고 있지요..
그렇게해서 read()를 사용해서 버퍼를 읽으면 되겠지요 예제코드는 다음과 같
을겁니다.

main()
{
fd_set readfs;
int sockfd;

/* socket 생성 루틴 들어가고 */

FD_ZERO(&readfs);
FD_SET(sockfd, &readfs);

if(select(.....) < 0)
{
/* 리트라이 요구 */
}
else
{
if(IS_FDSET(sockfd, &readfs))
{
read(.....);
/* 처리 */
}
}
}

이런식으로 하면 될거 같네여 ^^