2013-05-20 1 views
4

closesocket (m_socket)을 두 번 호출하면 어떻게됩니까? 첫 번째 호출 후 소켓이 닫힙니다. 두 번째 호출 후에도 프로그램이나 응용 프로그램에 적합하지 않은 무언가가 발생합니다. 아니면 그냥 무시할 수있는 오류를 반환합니다.이미 닫힌 소켓 winsock을 닫으려고하면 어떻게됩니까?

+0

이 [L1] (http://stackoverflow.com/questions/3115561/calling-shutdown-and-closesocket-twice-on-same-socket) 도움이 될 수 있습니다. –

답변

1

은의 매개 변수에 전달 된 소켓 기술자가 즉시 즉시 closesocket 함수 기능이 실행으로 시스템에 의해 재사용 될 수 있음을 http://msdn.microsoft.com/en-us/library/windows/desktop/ms737582(v=vs.85).aspx

참고를 참조하십시오. 따라서 s 매개 변수로 전달 된 소켓 설명 자에 대한 추가 참조가 WSAENOTSOCK 오류로 실패 할 것으로 예상하는 것은 신뢰할 수 없습니다. 오히려 필요한 담요 금지보다 - 파일 열기 및 다른 소켓을 포함 -

나는 중간 코드는 기술자를 포함하는 아무 짓도 모른다 때 의미로 두 번 소켓을 종료하지 않도록주의해야한다고 해석하는 것 그러나 이것은 실제적으로 연약한 것이며 여러분은 그 가능성을 피하기 위해 코딩해야합니다. 소켓 디스크립터를 유지하기 위해 사용하고있는 변수에 INVALID_SOCKET을 할당하면, closesocket을 다시 호출하기 전에 체크 할 수있다. 또는 (더 나쁜) 두 번째 호출의 부작용없는 실패를 보장 할 수있다.

관련 문제