recv 시 리턴값 0에 대한..

rasungboy의 이미지

안녕하세요.

계속 recv 하다 보면 어느순간 상대방에서 접속을 끊지 않았는데도

recv 리턴값이 0일 때가 있더군요. Graceful Disconnect 라고 전 생각하고

저는 접속을 끊는데 상대방쪽에 디버거를 걸어 확인해보면 오히려 상대방쪽은

내쪽이 끊었다고 인식합니다.

접속 끊을때의 상황을 살펴보면 내쪽에선 리턴값이 0인데 recv에 넘기는

버퍼사이즈가 0이더군요.
(즉 사용자 소켓버퍼가 꽉 차서 더이상 받을공간이없을경우)

근데 이렇게 버퍼사이즈가 0 을 넘기게 되면 보통 recv에서는 리턴값을 -1로
하고 errno 를 EAGAIN 이나 EWOULDBLOCK 으로 설정할텐데 왜
리턴값이 0인지 궁금합니다.

recv 에 넘기는 버퍼사이즈가 0일때 간혹 recv 리턴값이 0으로 나올때가
있는것인지요?(접속이 안끊겼어도)

만약 그렇다면 그러면 리턴값이 0이 나와도 접속이 끊김처리를 안해야
한다는것인데... 도저히 모르겠네요.. ^^;;

여러분들의 참고말씀 기달리겠습니다.