Поделиться через


CAsyncSocket::ReceiveFromEx

Эта функция-член вызывается с целью получить датаграмму и сохранить адрес источника в структуре SOCKADDR или в rSocketAddress (адреса IP версии 6 дескрипторов).

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.

  • Реализация Windows WSAENETDOWN sockets обнаружила, что подсистема сети.

  • WSAEFAULT Аргумент lpSockAddrLen недопустимо. буфер был lpSockAddr слишком мал, чтобы вместить адрес однорангового узла.

  • WSAEINPROGRESS А операция блокировки Windows sockets выполняется.

  • WSAEINVAL Сокет не было привязано с Привязка.

  • WSAENOTCONN Сокет не подключено (SOCK_STREAM ).

  • Не WSAENOTSOCK дескриптор сокета.

  • WSAEOPNOTSUPP   MSG_OOB указано, но сокет не является типом SOCK_STREAM.

  • WSAESHUTDOWN Сокет было деактивации; невозможно вызвать ReceiveFromEx на сокете после вызова ShutDown с nHow устанавливается значение 0 или 2.

  • WSAEWOULDBLOCK Сокет помечены как nonblocking и операция ReceiveFromEx запретитьTfа мере.

  • WSAEMSGSIZE Датаграмма слишком большим, чтобы поместить в заданный буфер и было усечено.

  • Виртуальный WSAECONNABORTED канал будет прервана из-за истечения времени ожидания или другой ошибки.

  • Виртуальный WSAECONNRESET канал был сброшено удаленной стороной.

Заметки

Эта функция используется для того, чтобы считать входные данные для сокета (возможно, подключенного) a и перенаправлять адрес, из которого данные были отправлены.

Эта функция аналогична CAsyncSocket::ReceiveFrom за исключением того, что она обрабатывает адреса IP версии 6 и более ранние протоколов.

Для сокетов типа SOCK_STREAM, возвращенное сведений в данный момент недоступен до размера, переданного буфера. Если было настроено сокет для встроенного параметра метода внеполосных данных ( SO_OOBINLINE сокета) и экстренные данные непрочитаны только экстренные данные возвращаются. Приложение может использовать параметр или OnOutOfBandDataIOCtlSIOCATMARK определить, нужно ли несколько внеполосных данных считываются. Параметры lpSockAddr и lpSockAddrLen игнорируются для сокетов SOCK_STREAM.

Для сокетов датаграмм, данные из первой извлечены всего датаграмм, до размера, переданного буфера. Если датаграмма больше предоставленный буфер, буфер заполняется первой частью сообщения, лишние данные будут потеряны, и будет возвращать ReceiveFromEx значение SOCKET_ERROR с набором кода ошибки в WSAEMSGSIZE.

Если значение ненулевое, lpSockAddr и сокет типа SOCK_DGRAM, то копирование сетевой адрес сокета, соответствующий структуре SOCKADDR отправленных данных. Значение, указанное в lpSockAddrLen инициализируется к размеру структуры, а изменения при возврате, чтобы отобразить фактический размер адреса, хранящихся там. Если входные данные не доступны на сокете, то вызов ReceiveFromEx ожидает поступления данных, если у сокета не будет nonblocking. В этом случае возвращается значение SOCKET_ERROR с набором кода ошибки в WSAEWOULDBLOCK. Обратный вызов OnReceive можно использовать, чтобы определить, когда поступают дополнительные данные.

Если сокет типа SOCK_STREAM и удаленная сторона выключала соединение корректно завершается немедленно, ReceiveFromEx полученных байтов с 0.

Требования

Header: afxsock.h

См. также

Ссылки

Класс CAsyncSocket

Диаграмма иерархии

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::Send