WSARecvEx
WSARecvEx 함수는 flags 매개변수가 입력/출력용 매개변수라는 점을 제외하고는 기존 recv 함수와 같은 기능을 합니다. 데이터그램 프로토콜을 사용해서 전체 메시지가 아닌 일부분만을 수신할 때, flags 매개변수에 MSG_PARTIAL 플래그가 설정되게 됩니다.
int PASCAL FAR WSARecvEx (
SOCKET s,
char FAR* buf,
int len,
int* flags
);
Parameters
s
[입력] 접속된 소켓을 식별하는 소켓
기술자
buf
[출력] 들어오는 데이터를 받아낼
버퍼
len
[입력] buf
매개변수의 길이
flags
[입력/출력] 데이터 그램 소켓에서
수신한 메시지가 통째로 수신되었는지 일부분만 수신되었는지를 식별하는 플래그
Remarks
윈도즈 소켓2에서 준비된 함수중 하나인 WSARecvEx 함수는 flags 매개변수가 입/출력 용으로 사용된다는 점을 제외하고는 recv 함수와 유사합니다. recv 함수에서의 flags 는 입력용으로만 사용되었었죠. 암튼, 이 추가적인 출력용 매개변수는 메시지 지향형 프로토콜을 사용할 때 메시지 전체가 수신되었는지 일부분만 수신 되었는지를 알아내는데 사용됩니다. 즉, 기존의 recv 함수는 각각의 recv 함수의 호출로 단일 메시지 만을 수신한데 반해서 WSARecvEx 함수는 지정한 버퍼로 다 담을 수 없을 크기의 메시지도 수신할 수 있다는 기능을 추가 하게된 것입니다.
WSARecvEx 함수는 스트림 지향형 프로토콜 에서는 recv 함수와 똑같이 사용됩니다.
그밖에 msdn에서는 여러 가지 설명을 하고 있는데, 별로 중요한 것 같지 않아서 그만 생략 합니다. 부가적인 정보를 더 원하신다면, msdn을 참고 하시기 바랍니다. 물론 해석은 본인이 부담하셔야죠. ^^
Return Values
에러가 발생하지 않는다면, WSARecvEx 함수는 수신된 바이트의 길이를 반환합니다. 만약 접속이 종료되었다면(close), 0을 반환하게 됩니다. 추가로 몇마디 하자면, 메시지 지향형 프로토콜에서 일부분의 메시지를 수신한 경우 flags 매개변수에서 MSG_PARTIAL 비트는 설정되게 됩니다. 반면, 완전한 메시지가 수신된다면, flags 매개변수에 MSG_PARTIAL 비트는 설정되지 않습니다.
에러가 발생한 경우 SOCKET_ERROR을 반환하게 되고 WSAGetLastError 함수를 이용해서 특정한 에러코드를 얻어낼 수 있습니다.
Error Codes
WSANOTINITIALISED | 이 함수를 사용하기 이전에 WSAStartup 함수를 성공적으로 호출해야 합니다. |
WSAENETDOWN | 네트웍 서브 시스템에 에러가 발생했습니다. |
WSAEFAULT | buf 매개변수가 제대로 할당된 메모리 공간을 가지고 있지 않습니다. |
WSAENOTCONN | 소켓이 접속되어 있지 않습니다. |
WSAEINTR | WSACancelBlockingCall 함수에 의해서 작업이 종료되었습니다. |
WSAEINPROGRESS | 블록킹 윈속1.1 호출이 현재 처리중에 있거나, 서비스 프로바이더가 아직 콜백함수를 처리하고 있습니다. |
WSAENETRESET | 접속이 상대방 호스트의 리셋으로 인하여 종료되었습니다. |
WSAENOTSOCK | 지정한 기술자가 소켓 기술자가 아닙니다. |
WSAEOPNOTSUPP | MSG_OOB 가 지정되었으나 소켓의 SOCK_STREAM과 같은 형태의 스트림 형식의 소켓이 아니고, out-of-band 데이터가 지원되지 않습니다. 또는 지정한 소켓이 단일 방향으로 전송용으로만 사용되는 소켓입니다. |
WSAESHUTDOWN | 소켓이 셧다운 되었습니다. |
WSAEWOULDBLOCK | 소켓이 비동기 소켓으로 마킹되어 있고, 수신연산이 바로 완료될 수 없는 경우 입니다. |
WSAEINVAL | 소켓이 바인드 되어 있지 않거나, 알 수 없는 플래그가 사용되었거나, SO_OOBINLINE을 활성화 시킨 상태에서 MSG_OOB를 지정햇습니다. 또는 len 매개변수가 0 이거나 음수 입니다. |
WSAECONNABORTED | 가상 연결망이 타임아웃이나 다른이유로 끊겨(terminate) 버렸습니다. |
WSAETIMEDOUT | 접속이 네트웍 오류나 상태방 시스템의 오류로 끊겨(drop) 버렸습니다. |
WSAECONNRESET | 가상 연경망이 상대방의 "hard" 또는 "abortive" 종료를 수행하여 끊겨(reset) 버렸습니다. |
QuickInfo
Windows NT : 사용가능
Windows CE
:
지원하지 않습니다.
Header
: mswsock.h.
Import
Library : mswsock.lib.
See Also