Функция обратного вызова 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 доступен определенный код ошибки.
Код ошибки | Значение |
---|---|
Произошел сбой сетевой подсистемы. | |
Буфер, на который ссылается параметр lpInboundDisconnectData , слишком мал. | |
Данные отключения не поддерживаются указанным семейством протоколов. | |
Выполняется блокировка вызова Windows Sockets или поставщик услуг по-прежнему обрабатывает функцию обратного вызова. | |
Сокет не подключен (только сокеты, ориентированные на подключение). | |
Дескриптор не является сокетом. |
Комментарии
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 |