FD_ISSET 에 관한 질문
글쓴이: 익명 사용자 / 작성시간: 토, 2002/02/02 - 10:00오후
select 문을 사용하여 소켓으로 입력되는 데이타를 읽으려고 합니다.
그런데 read 이벤트가 있은지 확인하는
FD_ISSET 에서 리턴값의 의미를 잘 모르겠네요
리턴값 < 0 이면 소켓이 끊어진 것으로 봐야되고
리턴값 > 0 이면 소켓에 데이타가 입력된것으로 간주 읽으면 되는데
리턴값 = 0 이면 뭐죠 처리를 어떻게 해야할지 모르겠네요
왜 이질문을 드리냐면 이상하게 가끔 서버쪽에선 소켓이 끊어진 채로
client 에서 재접속이 오지 않는데 client 에서는 소켓이 아직 연결
되있다고 하고 netstat 를 보면 recv-Q 에
데이타가 있는데 프로그렘에서 읽어가지 않은것으로 나타납니다.
그게 FD_ISSET 과 연관이 있지않을까 해서요
client 에서 소켓이 끊어진게 확인되야 서버로 재접속을 요청할텐데
말입니다.
고수님들의 조언 부탁 드립니다.
Forums:
Re: FD_ISSET 에 관한 질문
FD_ISSET() macro는 이름 그대로 특정 file descriptor가 fd_set에 있는지를 확인해줄 뿐입니다.
return 값은 true(1) or false(0)입니다.
클라이언트와 연결이 끊어졌을 경우, FD_ISSET()의 return 값은 1입니다. 어찌되었건 그 소켓에 이벤트가 발생했으니까요.
서버는 그 소켓으로부터 recv()하려고 합니다. 그리고 recv() 함수의 return 값으로부터 상태를 확인할 수 있습니다.
클라이언트로부터 데이터가 왔을 경우에는 데이터의 byte 수가 return될 것이고 연결이 끊어졌을 때는
0이 return될 것입니다.
댓글 달기