Сетевые технологии. Учебное пособие. Баканов В.М. - 56 стр.

UptoLike

Составители: 

56
int
recv(SOCKET sock, char FAR *buf, int bufsize, int flags);
Функции
send
и
recv
возвращают количество соответственно принятых и
переданных байтов данных. Принимающее данные приложение должно вы-
зывать функцию
recv
в цикле до тех пор, пока не будут приняты все передан-
ные данные, при этом на один вызов функции
send
может приходиться не-
сколько вызовов функции
recv
.
В случае ошибки обе эти функции возвращают значение
SOCKET_ERROR
,
для тщательного анализа ошибки следует использовать функцию
WSAGetLastError
.
В нижерасположенной таблице приведен список кодов ошибок, которые
могут возникать при вызове функции
send:
Код ошибки Описание
WSANOTINITIALISED
Перед использованием функции необходимо вызвать функ-
цию WSAStartup
WSAENETDOWN
Сбой в сети
WSAEACCES Указанный адрес является широковещательным (broadcast),
однако перед вызовом функции не был установлен соответ-
ствующий флаг
WSAEINTR
Выполнение функции было отменено при помощи функции
WSACancelBlockingCall
WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows
Sockets
WSAEFAULT Параметр buf указан некорректно (он не указывает на адрес-
ное пространство, принадлежащее приложению)
WSAENETRESET
Необходимо сбросить соединение
WSAENOBUFS
Возникла блокировка буфера
WSAENOTCONN
Сокет не подсоединен
WSAENOTSOCK
Указанный в параметре дескриптор не указывает на сокет
WSAESHUTDOWN Сокет не был закрыт функцией shutdown
WSAEWOULDBLOCK
Сокет отмечен как неблокирующий, но запрошенная опера-
ция приведет к блокировке
WSAEMSGSIZE Был использован сокет типа SOCK_DGRAM (предназна-
ченный для передачи датаграмм), но при этом размер пакета
данных превышает максимально допустимый для данной
реализации интерфейса Windows Sockets
WSAEINVAL Сокет не был подключен функцией bind
WSAECONNABORTED
Сбой соединения из-за слишком большой задержки или по
другой причине
WSAECONNRESET
Разрыв соединения удаленным узлом сети
При выполнении функции
recv
могут возникнуть следующие ошибки:
int
recv(SOCKET sock, char FAR *buf, int bufsize, int flags);

  Функции send и recv возвращают количество соответственно принятых и
переданных байтов данных. Принимающее данные приложение должно вы-
зывать функцию recv в цикле до тех пор, пока не будут приняты все передан-
ные данные, при этом на один вызов функции send может приходиться не-
сколько вызовов функции recv.
  В случае ошибки обе эти функции возвращают значение SOCKET_ERROR,
для тщательного анализа ошибки следует использовать функцию
WSAGetLastError.
  В нижерасположенной таблице приведен список кодов ошибок, которые
могут возникать при вызове функции send:

    Код ошибки                                  Описание
WSANOTINITIALISED       Перед использованием функции необходимо вызвать функ-
                        цию WSAStartup
WSAENETDOWN             Сбой в сети
WSAEACCES               Указанный адрес является широковещательным (broadcast),
                        однако перед вызовом функции не был установлен соответ-
                        ствующий флаг
WSAEINTR                Выполнение функции было отменено при помощи функции
                        WSACancelBlockingCall
WSAEINPROGRESS          Выполняется блокирующая функция интерфейса Windows
                        Sockets
WSAEFAULT               Параметр buf указан некорректно (он не указывает на адрес-
                        ное пространство, принадлежащее приложению)
WSAENETRESET            Необходимо сбросить соединение
WSAENOBUFS              Возникла блокировка буфера
WSAENOTCONN             Сокет не подсоединен
WSAENOTSOCK             Указанный в параметре дескриптор не указывает на сокет
WSAESHUTDOWN            Сокет не был закрыт функцией shutdown
WSAEWOULDBLOCK          Сокет отмечен как неблокирующий, но запрошенная опера-
                        ция приведет к блокировке
WSAEMSGSIZE             Был использован сокет типа SOCK_DGRAM (предназна-
                        ченный для передачи датаграмм), но при этом размер пакета
                        данных превышает максимально допустимый для данной
                        реализации интерфейса Windows Sockets
WSAEINVAL               Сокет не был подключен функцией bind
WSAECONNABORTED         Сбой соединения из-за слишком большой задержки или по
                        другой причине
WSAECONNRESET           Разрыв соединения удаленным узлом сети

  При выполнении функции recv могут возникнуть следующие ошибки:


                                    56