select 을 3번의 recv() 함수에 대해 모두 구현해주어야 합니까?
글쓴이: black0328 / 작성시간: 월, 2003/11/17 - 2:00오후
select 로 타임아웃을 걸었습니다. recv() 코드 부분이 제 프로그램에서 3군데가 있는데 select 문도 3번을 써주어야하는건가요?
select 함수가 리턴 된 후 timeval structure 가 남은 시간으로 업데이트 되지 않는 것으로 압니다.그래서 전 3번을 써줌으로서 계속 timeval 함수를 업데이트 해준것인데요...이것이 맞는 것인지 알려주세요
while(1)
{
tv.tc_sec=10;
tv/tv_msec =0;
FD_CLR(&ead)
FD_SET(maxfd,&ead)
select(maxfd,read,0,0,tv);
~생략
if(recv())
~생략
}
이 코드에서 recv()를 3번 씁니다. 그래서 전 이 구문을 3번 반복했습니다.
한가지 더 궁금한점은 tv를 게속 리셋해주어야 한다는 것인데..왜 그런지요...알려주세요
Forums:


[code:1] while(1) {
while(1) { temps = reads; timeout.tv_sec = 5; timeout.tv_usec = 0; result = select(1, &temps, 0, 0, &timeout); if(result == -1) { perror("select() error"); exit(1); } else if(result == 0) { perror("time out: select"); } else { if(FD_ISSET(0, &temps)) { str_len = read(0, message, BUFFER); message[str_len] = 0; fputs(message, stdout); } } }위의 소스로 timer setting 부분을 while문 밖으로 빼서 테스트 해보세요..
그럼 왜그런지 쉽게 아실수 있을 겁니다. -_-
즉... select()의 2, 3, 4, 5번 인자가value-re
즉... select()의 2, 3, 4, 5번 인자가
value-result argument 이기 때문에...
=3=33
댓글 달기