Share via


WSARecvDisconnect 함수(winsock2.h)

WSARecvDisconnect 함수는 소켓에서 수신을 종료하고 소켓이 연결 지향인 경우 연결 끊기 데이터를 검색합니다.

구문

int WSAAPI WSARecvDisconnect(
  [in]  SOCKET   s,
  [out] LPWSABUF lpInboundDisconnectData
);

매개 변수

[in] s

소켓을 식별하는 설명자입니다.

[out] lpInboundDisconnectData

들어오는 연결 끊기 데이터에 대한 포인터입니다.

반환 값

오류가 발생하지 않으면 WSARecvDisconnect는 0을 반환합니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 코드를 검색할 수 있습니다.

오류 코드 의미
WSANOTINITIALISED
이 함수를 사용하기 전에 성공적인 WSAStartup 호출이 발생해야 합니다.
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAEFAULT
lpInboundDisconnectData 매개 변수에서 참조하는 버퍼가 너무 작습니다.
WSAENOPROTOOPT
연결 끊기 데이터는 표시된 프로토콜 패밀리에서 지원되지 않습니다. 연결 해제 데이터를 지원하지 않는 TCP/IP 구현은 WSAENOPROTOOPT 오류 코드를 반환할 필요가 없습니다. TCP/IP의 Microsoft 구현에 대한 자세한 내용은 설명 섹션을 참조하세요.
WSAEINPROGRESS
차단 Windows 소켓 1.1 호출이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다.
WSAENOTCONN
소켓이 연결되지 않았습니다(연결 지향 소켓만 해당).
WSAENOTSOCK
설명자가 소켓이 아닙니다.

설명

WSARecvDisconnect 함수는 연결 지향 소켓에서 수신을 사용하지 않도록 설정하고 원격 당사자로부터 들어오는 연결 해제 데이터를 검색하는 데 사용됩니다. 이는 WSARecvDisconnect 에서 연결 끊기 데이터(이를 지원하는 프로토콜)를 수신할 수 있다는 점을 제외하고 종료(SD_RECEIVE)와 동일합니다.

이 함수가 성공적으로 실행되면 소켓에서 후속 수신이 허용되지 않습니다. WSARecvDisconnect를 호출해도 낮은 프로토콜 계층에는 영향을 주지 않습니다. TCP 소켓의 경우 수신 대기 중인 소켓에 여전히 데이터가 대기 중이거나 이후에 데이터가 도착하는 경우 사용자에게 데이터를 전달할 수 없으므로 연결이 다시 설정됩니다. UDP의 경우 들어오는 데이터그램이 허용되고 큐에 대기됩니다. 어떤 경우에도 ICMP 오류 패킷이 생성되지 않습니다.

참고 Windows에서 TCP/IP의 네이티브 구현은 데이터 연결 끊기를 지원하지 않습니다. 연결 끊기 데이터는 WSAPROTOCOL_INFO 구조에 XP1_DISCONNECT_DATA 플래그가 있는 Windows Sockets 공급자에서만 지원됩니다. WSAEnumProtocols 함수를 사용하여 설치된 모든 공급자에 대한 WSAPROTOCOL_INFO 구조를 가져옵니다.
 
들어오는 연결 끊기 데이터를 성공적으로 수신하려면 애플리케이션이 다른 메커니즘을 사용하여 회로가 닫혔는지 확인해야 합니다. 예를 들어 애플리케이션은 FD_CLOSE 알림을 받거나, 0 반환 값을 받거나, recvWSARecv / 에서 WSAEDISCON 또는 WSAECONNRESET 오류 코드를 수신해야 합니다.

WSARecvDisconnect 함수는 소켓을 닫지 않으며 closesocket이 호출될 때까지 소켓에 연결된 리소스가 해제되지 않습니다.

WSARecvDisconnect 함수는 소켓의 SO_LINGER 설정에 관계없이 차단되지 않습니다.

애플리케이션은 WSARecvDisconnect를 사용하여 연결이 끊긴 후 소켓을 다시 사용할 수 있어야 합니다. 특히 Windows 소켓 공급자는 이러한 소켓에서 연결 또는 WSAConnect 사용을 지원할 필요가 없습니다.

참고WSARecvDisconnect와 같은 차단 Winsock 호출을 실행할 때 Winsock은 호출이 완료되기 전에 네트워크 이벤트를 기다려야 할 수 있습니다. Winsock은 이 상황에서 경고 가능한 대기를 수행하며, 동일한 스레드에서 예약된 APC(비동기 프로시저 호출)에 의해 중단될 수 있습니다. 동일한 스레드에서 지속적인 차단 Winsock 호출을 중단한 APC 내에서 또 다른 차단 Winsock 호출을 실행하면 정의되지 않은 동작이 발생하며 Winsock 클라이언트에서 시도해서는 안 됩니다.
 

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 winsock2.h
라이브러리 Ws2_32.lib
DLL Ws2_32.dll

추가 정보

WSAConnect

WSAEnumProtocols

WSAGetLastError

WSAPROTOCOL_INFO

WSARecv

Winsock 함수

Winsock 참조

closesocket

connect

socket