2009-10-11 4 views
0

나는 for(;;) 루프와 select() 루프를 사용하여 소켓에서 작업을 recv/send하고 파일 설명자를 모니터하는 프로그램 인 C 프로그램을 가지고있다. 패킷에 80msec마다 패킷을 보내려면이 프로그램이 필요합니다. 어떻게 구현할 수 있습니까? 아마도 fork()을 사용할 수 있으며 하위 프로세스는 select()에 의해 모니터링되는 파일 설명자 중 하나에 ack을 80msec마다 간단히 작성합니다. 더 나은 솔루션이 있습니까?select()를 사용하여 무한 루프에서 nanosleep을 사용할 수 있습니까?

답변

3

select()를 호출 할 때 timeout 인수를 사용하여 선택 대기 시간을 제한 할 수 있습니다.

struct timeval { 
      long tv_sec;   /* seconds */ 
      long tv_usec;  /* microseconds */ 
     }; 

int select(int nfds, fd_set *readfds, fd_set *writefds, 
       fd_set *exceptfds, struct timeval *timeout); 

타임 아웃을 80msec로 제한하고 필요한 패킷을 보내는 것이 쉽습니다.

+0

멋지다. 어디에서 이것이 존재한다는 것을 알게 되었습니까? – Karl

+0

문제는 select()가 80msec에 여러 시간을 반환하고, 이식성을 위해 남은 시간과 timeval sturct를 다시 사용할 수 없다는 것입니다. (리눅스 만 제대로합니다) ... – Federico

+1

@karl : man select : P – Federico