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


Функция обратного вызова LPWSPRECVDISCONNECT (ws2spi.h)

Функция LPWSPRecvDisconnect завершает прием в сокете и извлекает данные об отключении, если сокет ориентирован на подключение.

Синтаксис

LPWSPRECVDISCONNECT Lpwsprecvdisconnect;

int Lpwsprecvdisconnect(
  [in]  SOCKET s,
  [out] LPWSABUF lpInboundDisconnectData,
  [out] LPINT lpErrno
)
{...}

Параметры

[in] s

Дескриптор, определяющий сокет.

[out] lpInboundDisconnectData

Указатель на буфер, в который копируются данные об отключении.

[out] lpErrno

Указатель на код ошибки.

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

Если ошибка не возникает, функция LPWSPRecvDisconnect возвращает ноль. В противном случае возвращается значение SOCKET_ERROR, а в lpErrno доступен определенный код ошибки.

Код ошибки Значение
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEFAULT
Буфер, на который ссылается параметр lpInboundDisconnectData , слишком мал.
WSAENOPROTOOPT
Данные отключения не поддерживаются указанным семейством протоколов.
WSAEINPROGRESS
Выполняется блокировка вызова Windows Sockets или поставщик услуг по-прежнему обрабатывает функцию обратного вызова.
WSAENOTCONN
Сокет не подключен (только сокеты, ориентированные на подключение).
WSAENOTSOCK
Дескриптор не является сокетом.

Комментарии

LPWSPRecvDisconnect используется в сокетах, ориентированных на подключение, чтобы отключить прием и получить все входящие данные об отключении от удаленной стороны.

После успешной выдачи этой функции последующие действия в сокете будут запрещены. Это не влияет на нижние уровни протокола. Для TCP окно TCP не изменяется, и входящие данные будут приняты (но не подтверждены) до тех пор, пока окно не будет исчерпано. Для UDP входящие датаграммы принимаются и помещаются в очередь. Ни в каких случаях не создается пакет ошибки ICMP.

Для успешного получения входящих данных об отключении клиент Windows Sockets SPI должен использовать другие механизмы, чтобы определить, что канал закрыт. Например, клиент должен получить уведомление FD_CLOSE или получить нулевое возвращаемое значение или код ошибки WSAEDISCON из LPWSPRecv.

Обратите внимание, что LPWSPRecvDisconnect не закрывает сокет, а ресурсы, подключенные к сокету, не будут освобождены до вызова LPWSPCloseSocket .

Примечание

LPWSPRecvDisconnect не блокируется независимо от параметра SO_LINGER в сокете. Клиент WINDOWS Sockets SPI не должен полагаться на возможность повторного использования сокета после того, как он был установлен LPWSPRecvDisconnect. В частности, поставщик сокетов Windows не требуется для поддержки использования LPWSPConnect в таком сокете.

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть ws2spi.h

См. также раздел

LPWSPConnect

LPWSPSocket