Функция WSARecvDisconnect (winsock2.h)
Функция WSARecvDisconnect завершает прием в сокете и извлекает данные об отключении, если сокет ориентирован на подключение.
Синтаксис
int WSAAPI WSARecvDisconnect(
[in] SOCKET s,
[out] LPWSABUF lpInboundDisconnectData
);
Параметры
[in] s
Дескриптор, определяющий сокет.
[out] lpInboundDisconnectData
Указатель на входящие данные отключения.
Возвращаемое значение
Если ошибки не происходит, WSARecvDisconnect возвращает ноль. В противном случае возвращается значение SOCKET_ERROR, а определенный код ошибки можно получить, вызвав WSAGetLastError.
Код ошибки | Значение |
---|---|
Перед использованием этой функции должен быть выполнен успешный вызов WSAStartup . | |
Произошел сбой сетевой подсистемы. | |
Буфер, на который ссылается параметр lpInboundDisconnectData , слишком мал. | |
Данные об отключении не поддерживаются указанным семейством протоколов. Обратите внимание, что реализации TCP/IP, которые не поддерживают данные об отключении, не требуются для возврата кода ошибки WSAENOPROTOOPT. Сведения о реализации TCP/IP майкрософт см. в разделе примечаний. | |
Выполняется блокирующий вызов Windows Sockets 1.1 или поставщик услуг по-прежнему обрабатывает функцию обратного вызова. | |
Сокет не подключен (только сокеты, ориентированные на подключение). | |
Дескриптор не является сокетом. |
Комментарии
Функция WSARecvDisconnect используется в сокетах, ориентированных на подключение, чтобы отключить прием и получить все входящие данные об отключении от удаленной стороны. Это эквивалентно завершению работы (SD_RECEIVE), за исключением того, что WSARecvDisconnect также позволяет получить данные об отключении (в протоколах, которые его поддерживают).
После успешного выполнения этой функции последующие приемы в сокете будут запрещены. Вызов WSARecvDisconnect не влияет на нижние уровни протокола. Для сокетов TCP, если в сокете по-прежнему находится в очереди данные, ожидающие получения, или данные поступают впоследствии, подключение сбрасывается, так как данные не могут быть доставлены пользователю. Для UDP входящие датаграммы принимаются и помещаются в очередь. Ни в каких случаях не будет создан пакет ошибки ICMP.
Функция WSARecvDisconnect не закрывает сокет, и ресурсы, подключенные к сокету, не будут освобождены до вызова closesocket .
Функция WSARecvDisconnect не блокируется независимо от параметра SO_LINGER в сокете.
Приложение не должно полагаться на возможность повторного использования сокета после отключения с помощью WSARecvDisconnect. В частности, поставщик сокетов Windows не требуется для поддержки использования connect или WSAConnect в таком сокете.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | winsock2.h |
Библиотека | Ws2_32.lib |
DLL | Ws2_32.dll |