2012-03-17 5 views
2

epoll을 레벨 트리거로 사용하고 있습니다. recv(3)에 따르면 이 0이면 "메시지를받을 수없고 피어가 정상 종료를 수행했습니다"라고 반환합니다. 이것은 전체 요청이 수신되었고 소켓이 다른 쪽에서 닫혔다는 것을 의미합니까? 소켓이 양쪽 끝에서 닫혔다 고요? 아니면 단순히 전체 요청을 받았고 소켓이 응답을 기다리고 있을까요? 어떤 도움이라도 대단히 감사하겠습니다.epoll recv 반환 값

What value will recv() return에 따르면 이 0을 반환하는 것처럼 들리면 연결이 다른 쪽에서 닫힙니다. 그렇다면 epoll 측에서해야 할 일은 무엇입니까? 소켓을 epoll_ctl (EPOLL_CTL_DEL)으로 전화하고 close (으)로 전화하면 완전히 제거해야합니까?

답변

4

연결을 통해 전송 된 모든 데이터를 이미 읽었다는 것을 의미합니다. TCP FIN 만 남았습니다. 리모컨이 완전히 닫히거나 출력이 종료 될 수 있습니다. 원격. 피어 (peer)만이 셧다운 (shutdown) 상태에 있다는 것을 알지 못한다면 소켓을 닫을 수있다.이 경우에는 여전히 소켓에 쓸 수있다. 귀하의 응용 프로그램 프로토콜이이 모든 것을 결정합니다.

TCP에는 요청이나 응답과 같은 것이 없습니다. 양방향 바이트 스트림이 있습니다.