2016-07-12 3 views
0

::recv()을 통해 바이트를 수신 중이며 0을 반환하는 시나리오가 있습니다. 여기에 따르면Linux 소켓 - 연결이 끊어 졌거나 완료 되었습니까?

http://www.tutorialspoint.com/unix_system_calls/recv.htm

이는 : 피어 순차적 종료를 수행 할 때

반환 값은 0 일 것이다.

연결의 어느 쪽을 닫았는지 확인할 수있는 방법이 있습니까? 나는 원격 클라이언트가 우리의 연결을 죽였는 지, 아니면 우리 측의 어떤 논리가 그것을 막았는지는 모른다.

+1

':: recv'는 C가 아니지만 C++ 일 수 있습니다. 올바른 언어 태그를 사용하십시오. 그러나 '0'을 얻을 다른 이유가있다. 비 블로킹 소켓의 경우. – Olaf

+0

저는 recv()가 C에 있습니다. 왜냐하면 glibc (http://www.gnu.org/software/libc/manual/html_node/Receiving-Data.html)와 리눅스 커널이 작성 되었기 때문입니다 C? 내가 비 차단 소켓을 사용하고 있다고 생각하지 않습니다. – user997112

+1

@Olaf 또한 C 태그가 정당하다고 생각합니다. – a3f

답변

3

연결의 어느 쪽을 닫았는지 확인할 수있는 방법이 있습니까?

동료가 닫았습니다. 반대편.

원격 클라이언트가 우리의 연결을 죽였는 지 또는 우리 측의 일부 논리가 그것을 닫았는지 나는 알지 못합니다.

예. 피어가 그것을 닫았습니다. 닫은 경우 오류 EBADF이 표시됩니다.

+0

답변 해 주셔서 감사합니다. 할 수있을 때 받아 들일 것입니다. – user997112

관련 문제