리눅스 select함수 timeout관련
글쓴이: 익명 사용자 / 작성시간: 토, 2020/11/07 - 3:37오후
리눅스로 소켓프로그래밍을 하는데 select의 return값이 0이면 timeout을 출력하도록 했는데 출력이 안됩니다.
FD_ZERO(&reads);
FD_SET(sock1,&reads);
FD_SET(sock2,&reads);
fd_max=sock2;
while(1){
cpy_reads=reads;
timeout.tv_sec=5;
timeout.tv_usec=0;
fd_num=select(fd_max+1,&cpy_reads,0,0,&timeout);
if(fd_num==-1) {
error_handling("select() error\n");
}
else if (fd_num == 0) {//이부분이 잘 수행되지않습니다
printf("Timeout");
continue;
}
else{
//이부분은 잘 수행됨
FD_CLR(sock1, &cpy_reads);
FD_CLR(sock2, &cpy_reads);
}
무엇이 문제일까요
Forums:
select 바로 밑에 fd_num을 출력해 보면
select 바로 밑에 fd_num을 출력해 보면 어떤 값이 나오나요..?
---
http://coolengineer.com
timeout이 5초로 돼있는데 운영환경에서 5초이상
timeout이 5초로 돼있는데 운영환경에서 5초이상 패킷이 안 들어오는 일이 없거나, 그게 아니라면 터미널과 유리된 데몬으로 동작한다든지 하는 이유로
printf("Timeout");
출력이 버려지고 있는 것 아닐까요?아, 이 답글을 보고 생각난 것은, 버퍼 때문인것
아, 이 답글을 보고 생각난 것은, 버퍼 때문인것 같으며, 뒤에 개행을 넣어 "Timeout\n" 으로 하면 바로 보이겠군요. ^^
아니면,
강제로 버퍼를 끄고 실행해도 될 것 같네요.
---
http://coolengineer.com
댓글 달기