2009-11-08 2 views
0

나는 다음과 같은 코드가 있습니다close()를

는 클라이언트 측

: 서버 측

n=recv(sock,buf,1200,NULL); 

: 문제의
shutdown(sockk,SD_BOTH); 

입니다

을 클라이언트 쪽 recv은 0을 반환합니다. 이는 정상적인 종료를 의미합니다. -1을 반환해야합니다 (클라이언트 측을 변경할 수 없습니다. 코드를 수정해야합니다.)

-1을 반환하도록하려면 어떻게해야합니까?

+0

-1을 반환해야하는 이유는 무엇입니까? 이것은 정상적인 종료입니다. 정상적인 종료를 원하지 않으면'shutdown()'을 사용하지 마십시오. – Hasturkun

답변

0

서버에서 shutdown() 또는 close()를 호출하면 클라이언트 측 프로세스에 신호를 보낼 수 있습니다. 따라서 recv() 호출은 EINTR로 설정된 errno와 함께 -1을 리턴합니다. 희망이 도움이됩니다.

하지만 이러한 코딩 방법을 채택해서는 안됩니다. recv()는 0, + ve 및 -1을 반환 할 수 있습니다. 이 모든 경우를 처리하는 것이 좋습니다.

2

나는 그것을 알아 냈습니다. 내 소켓을 SO_LINGER로 설정하여 중단 종료가 발생하면 shutdown() 후 -1이 반환됩니다. 감사합니다.

관련 문제