WSAGetOverlappedResult
WSAGetOverlappedResult 함수는 매개변수로 지정한 소켓에 대한 오버랩 연산의 결과를 반환하는 함수 입니다.
BOOL WSAGetOverlappedResult (
SOCKET s,
LPWSAOVERLAPPED lpOverlapped,
LPDWORD lpcbTransfer,
BOOL fWait,
LPDWORD lpdwFlags
);
Parameters
s
[입력] 소켓을 식별하는 기술자입니다.
이 소켓은 WSARecv,
WSARecvFrom,
WSASend,
WSASendTo
또는 WSAIoctl
함수를 호출할 때 지정한 소켓과 같은 소켓입니다.
lpOverlapped
[입력] 오버랩 연산이 시작될
때 지정된 WSAOVERLAPPED
구조체에 대한 포인터
pcbTransfer
[출력] 전송이나 수신 연산
또는 WSAIoctl 함수에 의해서 실제적으로 송/수신된 바이트의 갯수를 받는 32비트
변수에 대한 포인터
fWait
[입력] fWait 매개변수는
오버랩 연산을 완료하기위해 대기할 것인지를 결정하는 플래그입니다. 만약 이 값이
TRUE라면, 함수는 작업이 완료될 때까지 반환하지 않습니다. 만약 이 매개변수가
FALSE이고 연산이 여전히 기다림 상태라면, 이 함수는 FALSE를 반환하고, WSAGetLastError
함수는 WSA_IO_INCOMPLETE 에러코드를 반환 할 것입니다. fWait 매개변수는
오버랩 연산이 이벤트 기반의 완료통지로 선택 되었을 경우만 TRUE로 설정되어야
합니다.
lpdwFlags
[출력] 작업
완료 상태를 가진 한 개 또는 여러개의 플래그를 수신할 32비트의 변수에 대한 포인터입니다.
만약 오버랩 연산이 WSARecv
나 WSARecvFrom
으로 시작되었다면, 이 매개변수는 lpFlags 매개변수에 대한 결과 값을 가지고
있게 됩니다.
Remarks
WSAGetOverlappedResult 함수는 지정된 소켓에 대해서 마지막 오버랩 연산의 결과를 알려줍니다. 이 함수는 오버랩 함수를 호출했을 때 지정되어 사용된 소켓 기술자와 WSAOVERLAPPED 구조체를 넘겨 받습니다. 작업중인 연산은 연산을 시작한 함수가 FALSE를 반환했을 때 알려지게 되고, WSAGetLastError 함수는 WSA_IO_PENDING을 반환하게 됩니다. WSARecv 함수와 같은 I/O 연산이 기다림 상태일 때, 연산을 시작한 함수는 신호받지 않은 상태를 위해 WSAOVERLAPPED 구조체의 hEvent 멤버를 리셋합니다. 그런후... 대기하고 있던 연산이 작업을 완료 했을 때 시스템은 신호받은 상태를 표시하기 위해서 이벤트 객체를 설정하게 됩니다.
만약 fWait 매개변수가 TRUE라면, WSAGetOverlappedResult 함수는 기다리고 있는 연산이 신호받은 상태로 완료되었는지 아닌지를 결정하게 됩니다. 클라이언트는 I/O 연산이 요청되어 졌을 때 이벤트 기반의 완료 통지를 선택했을 경우만 fWait 매개변수를 TRUE로 설정 합니다. 만약 다른 형태의 통지가 선택되어 졌다면, WSAOVERLAPPED 구조체의 hEvent 매개변수의 사용법은 다를 것입니다. 그리고, fWait 매개변수를 TRUE로 설정하는 것은 예기치 않은 결과를 가져올 수 있습니다.
Return Values
함수가 성공적으로 수행된다면, TRUE를 반환하게 됩니다. 이렇게 함수가 성공적으로 수행 되었다는 의미는 오버랩 연산이 성공적으로 수행 되었다는 의미이고, lpcbTransfer 매개변수로 포인트된 값이 업데이트 되었다는 것을 의미합니다. 반면, 이 함수가 FALSE를 반환 했다는 의미는 오버랩 연산이 아직 완료되지 않았거나, 오버랩 연산이 완료되었으나 에러가 발생한 경우이거나, 오버랩 연산의 완료 상태가 WSAGetOverlappedResult 함수의 매개변수에 에러가 있어서 결정되지 못한 경우입니다. 이렇게 에러가 발생한 경우에 lpcbTransfer 매개변수는 업데이트 되지 않습니다. 이럴 때 세부적인 에러를 찾아내고자 한다면, WSAGetLastError 함수를 호출하여 특정한 에러코드를 얻어낼 수 있습니다.
Error Codes
WSANOTINITIALISED | 이 함수를 사용하기 전에 성공적인 WSAStartup 함수의 호출이 없었습니다. |
WSAENETDOWN | 네트웍 서브 시스템에서 에러가 발생했습니다. |
WSAENOTSOCK | 지정된 소켓이 소켓 기술자가 아닙니다. |
WSA_INVALID_HANDLE | WSAOVERLAPPED 구조체의 hEvent 필드가 올바른 이벤트 객체 핸들을 포함하고 있지 않습니다. |
WSA_INVALID_PARAMETER | 매개변수중 하나가 잘못되었습니다. |
WSA_IO_INCOMPLETE | fWait 매개변수가 FALSE로 설정되어 있고, I/O 연산이 아직 완료되지 않았습니다. |
WSAEFAULT | lpOverlapped, lpcbTransfer 또는 lpdwFlags 매개변수중에 잘못된 메모리 공간을 가지고 있는 매개변수가 있습니다. |
QuickInfo
Windows NT : 사용가능
Windows :
사용가능
Windows CE : 지원하지 않습니다.
Header
:
Win16/32
: winsock.h
Win32-II
: winsock2.h
Import Library :
Win16 : winsock.lib
Win32
: wsock32.lib
Win32-II
: ws2_32.lib
overview, WSAAccept, WSAConnect, WSACreateEvent, WSAIoctl, WSARecv, WSARecvFrom, WSASend, WSASendTo, WSAWaitForMultipleEvents