CAsyncSocket::ReceiveFrom

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

int ReceiveFrom ( void * lpBuf, int nBufLen, SOCKADDR * lpSockAddr, int * lpSockAddrLen, int nFlags = 0 );

Возвращаемое значение

Если ошибка не возникает, метод ReceiveFrom возвращает число полученных байтов. Если подключение было закрыто, то возвращается 0. В противном случае возвращается значение SOCKET_ERROR , и код ошибки можно получить, вызвав функцию GetLastError. Следующие ошибки применяются к этой функции-члена:

Параметры

lpBuf

Буфера для поступающих данных.

nBufLen

Длина lpBuf в байтах.

rSocketAddress

Ссылка на объект CString , который получает точечно числовой IP-адрес.

rSocketPort

Ссылка на UINT , который хранит порт.

lpSockAddr

Указатель на структуру SOCKADDR , которая содержит адрес источника по возвращении.

lpSockAddrLen

Указатель на длину адреса источника в lpSockAddr в байтах.

nFlags

Указывает способ, в котором производится вызов. Семантика этой функции определяются параметры socket и параметр nFlags . Построен путем объединения любого из следующих значений с C++ или оператор:

Примечания

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

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

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

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

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

Обзор CAsyncSocket |nbsp; Члены класса | Иерархическая схема

См. также CAsyncSocket::AsyncSelect, CAsyncSocket::Create, CAsyncSocket::Receive, CAsyncSocket::Send

Index