[완료] select 함수 사용시 -1이 리턴되는 이유가 뭔가요?
글쓴이: fourier / 작성시간: 토, 2009/05/16 - 2:00오전
select 함수를 사용해서 간단한 채팅 프로그램을 짜고 있는데요.
select();
if(FD_ISSET(serversocket,&read))
Accept(클라이언트);
else
같은방 사람들에게 에코
프로그램은 대충 이런식의 구조입니다..
문제는요..
클라이언트1 접속
클라이언트2 접속
클라이언트3 접속
클라이언트3 강제종료
이랫을땐 아무 문제없이 클라이언트1과 2가 채팅이 가능합니다.
하지만 클라이언트1이나 2가 먼저 강제종료 하면 나머지 사람들이 채팅이 불가능합니다.
디버깅을 해보면 후자인 경우엔 select 함수에서 -1 을 리턴해줘서 accept 를 기다리는 상태에 놓여있더군요
마지막에 접속한 사람이 강제종료 했을땐 아무 문제가 없는데 왜 나머지 사람들이 종료하면 갑자기 select에서 -1이 리턴되는걸까요?
select 함수는 대체 어쩔때 -1이 리턴되는건가요?
Forums:
...
반환 값이,
> 0 : read/write/except fd의 상태 변화가 감지 됐을 때
0 : select가 timeout 됐음
< 0 : 에러가 발생되었음. errno를 이용해 자세한 에러 내역을 확인해보세요.
아 해결했습니다.
perror 찍어보니 bad file descripter 가 나왔습니다.
그래서 한참 해맨끝에 원인을 찾았습니다.
원인은 close를 해줄때 FD_CLR 를 안해줘서 였습니다. ㅠㅠ
답변 감사합니다.
댓글 달기