다음을 통해 공유


CAsyncSocket::ReceiveFromEx

데이터 그램을 받고 소스 주소를 저장 하려면이 멤버 함수를 호출 하는 SOCKADDR 구조에서 rSocketAddress (IPv6 주소 처리).

int ReceiveFromEx(
   void* lpBuf,
   int nBufLen,
   CString& rSocketAddress,
   UINT& rSocketPort,
   int nFlags = 0 
);

매개 변수

  • lpBuf
    들어오는 데이터 버퍼입니다.

  • nBufLen
    길이 lpBuf (바이트)에서입니다.

  • rSocketAddress
    참조 하는 CString 점선된 숫자 IP 주소를 수신 하는 개체입니다.

  • rSocketPort
    참조 하는 UINT 는 포트를 저장 합니다.

  • nFlags
    호출 되는 방법을 지정 합니다.이 함수의 의미는 소켓 옵션으로 결정 됩니다 및 nFlags 매개 변수.C + +에서 다음 값을 조합 하 여 후자 생성 된 OR 운영자:

    • MSG_PEEK 에 들어오는 데이터 보기.데이터 버퍼에 복사 되는 입력된 큐에서 제거 되지 않습니다.

    • MSG_OOB 대역의 데이터를 처리 합니다.

반환 값

오류가 발생 하는 경우 ReceiveFromEx 수신 된 바이트 수를 반환 합니다.연결을 닫은 경우 0을 반환 합니다.그렇지 않으면 값이 SOCKET_ERROR 반환 됩니다 및 특정 오류 코드를 호출 하 여 검색할 수 있는 GetLastError.다음 오류는이 멤버 함수에 적용 됩니다.

  • WSANOTINITIALISED 성공적으로 AfxSocketInit 이 API를 사용 하기 전에 발생 합니다.

  • WSAENETDOWN 는 Windows 소켓 구현이 감지 네트워크 하위 시스템 실패 합니다.

  • WSAEFAULT 의 lpSockAddrLen 인수가 잘못 되었습니다:에서 lpSockAddr 버퍼가 너무 작아 피어 주소.

  • WSAEINPROGRESS Windows 소켓 차단 작업이 진행 중입니다.

  • WSAEINVAL 소켓에는 바인딩되지 않은 바인딩할.

  • WSAENOTCONN 소켓이 연결 되어 있지 않습니다 (SOCK_STREAM 만).

  • WSAENOTSOCK 설명자가 소켓이 아닙니다.

  • WSAEOPNOTSUPP   MSG_OOB 지정 된 소켓 형식의 아닙니다 SOCK_STREAM.

  • WSAESHUTDOWN ; 아래로 소켓 이미 종료 된 호출할 수 없는 ReceiveFromEx 후 소켓 ShutDown 호출 된 nHow 0 또는 2로 설정 합니다.

  • 아닙니다 소켓 표시 비블로킹으로 및 ReceiveFromEx 수 작업을 차단 합니다.

  • WSAEMSGSIZE 데이터 그램이 너무 커서 지정한 버퍼로 하므로 잘렸습니다.

  • WSAECONNABORTED 가상 회로 시간 초과 나 기타 오류로 인해 중단 되었습니다.

  • WSAECONNRESET 가상 회로 원격 나란히 원래 대로 설정 했습니다.

설명

이 함수를 사용 하 여 (연결된 가능) 소켓에서 들어오는 데이터를 읽고 데이터를 보낼 주소를 캡처.

이 함수는 것 CAsyncSocket::ReceiveFrom i p v 6를 처리를 제외 하 고도 오래 된 프로토콜에 설명 합니다.

소켓의 종류에 대 한 SOCK_STREAM, 현재 제공 되는 버퍼의 크기까지 사용할 수 있는 많은 정보를 반환 합니다.소켓에 선 밴드의 데이터 수신에 구성 된 경우 (소켓 옵션 SO_OOBINLINE)와 밴드의 데이터 읽기 수 없습니다만의 아웃-밴드 데이터를 반환 합니다.응용 프로그램을 사용할 수 있는 IOCtlSIOCATMARK 옵션 또는 OnOutOfBandData 더-대역외 데이터를 읽을 수 있는지 확인 합니다.lpSockAddr 및 lpSockAddrLen 매개 변수를 무시 SOCK_STREAM 소켓.

데이터 그램 소켓에 대 한 데이터까지 제공 된 버퍼의 크기는 첫 번째 큐에 데이터 그램에서 추출 됩니다.데이터 그램 제공 된 버퍼 보다 크면 메시지의 첫 번째 부분으로 버퍼가 채워지거나, 초과 데이터는 손실 됩니다 및 ReceiveFromEx 값을 반환 합니다. SOCKET_ERROR 오류 코드로 설정 WSAEMSGSIZE.

경우 lpSockAddr 0이 아닙니다 및 소켓 형식이 SOCK_DGRAM에 해당 하는 데이터 전송의 소켓의 네트워크 주소 복사 됩니다 SOCKADDR 구조.값으로를 가리키는 lpSockAddrLen 이 구조체의 크기를 초기화 하 고 반환이 실제 크기의 저장 된 주소를 나타내기 위해 수정 됩니다.들어오는 데이터를 소켓에 사용할 수 있는 경우는 ReceiveFromEx 호출 대기 데이터 소켓 아니면 도착 비블로킹.이 경우 값에 SOCKET_ERROR 설정 오류 코드로 반환 아닙니다.OnReceive 콜백을 사용 하 여 더 많은 데이터가 도착할 때 확인할 수 있습니다.

소켓 형식인 경우 SOCK_STREAM 및 원격 쪽에서는 연결 아래로 들을 정상적으로, 종료는 ReceiveFromEx 0 바이트 수신으로 즉시 완료 됩니다.

요구 사항

헤더: afxsock.h

참고 항목

참조

CAsyncSocket 클래스

계층 구조 차트

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::Send