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