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


CAsyncSocket::Receive

Эта функция-член вызывается с целью получить данные из сокета.

virtual int Receive( 
   void* lpBuf, 
   int nBufLen, 
   int nFlags = 0  
);

Параметры

  • lpBuf
    Буфер для входящих данных.

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

  • nFlags
    Определяет способ вызова. Семантика этой функции определяется параметрами сокета и параметром nFlags. Второй построен, объединяя любой после значений с оператором C++ OR:

    • Считывает MSG_PEEK на входящих данных. Данные в буфер копируются но не удалены из входной очереди.

    • Сведения о MSG_OOB вне процесса.

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

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

  • WSANOTINITIALISED А успешное AfxSocketInit должно произойти перед использованием этого API.

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

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

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

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

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

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

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

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

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

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

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

Заметки

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

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

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

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

Получить должно быть вызываются только один раз, каждый раз CAsyncSocket::OnReceive вызываются.

Пример

См. пример для CAsyncSocket::OnReceive.

Требования

Header: afxsock.h

См. также

Ссылки

Класс CAsyncSocket

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

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send