Функция WSASendDisconnect (winsock2.h)

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

Синтаксис

int WSAAPI WSASendDisconnect(
  [in] SOCKET   s,
  [in] LPWSABUF lpOutboundDisconnectData
);

Параметры

[in] s

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

[in] lpOutboundDisconnectData

Указатель на исходящие данные отключения.

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

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

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

Комментарии

Функция WSASendDisconnect используется на сокетах, ориентированных на подключение, чтобы отключить передачу и инициировать завершение соединения вместе с передачей данных об отключении, если таковые есть. Это эквивалентно завершению работы (SD_SEND), за исключением того, что WSASendDisconnect также позволяет отправлять данные об отключении (в протоколах, поддерживающих их).

После успешной выдачи этой функции последующие отправки запрещены.

Параметр lpOutboundDisconnectData , если он не равен NULL, указывает на буфер, содержащий исходящие данные отключения, которые будут отправлены удаленной стороне для извлечения с помощью WSARecvDisconnect.

Примечание Собственная реализация TCP/IP в Windows не поддерживает отключение данных. Отключение данных поддерживается только поставщиками сокетов Windows, которые имеют флаг XP1_DISCONNECT_DATA в своей структуре WSAPROTOCOL_INFO . Используйте функцию WSAEnumProtocols для получения WSAPROTOCOL_INFO структур для всех установленных поставщиков.
 
Функция WSASendDisconnect не закрывает сокет, и ресурсы, подключенные к сокету, не будут освобождены до вызова closesocket .

Функция WSASendDisconnect не блокируется независимо от параметра SO_LINGER в сокете.

Приложение не должно полагаться на возможность повторного использования сокета после вызова WSASendDisconnect. В частности, поставщик сокетов Windows не требуется для поддержки использования подключения/WSAConnect к такому сокету.

Примечание При выполнении блокирующего вызова Winsock, например WSASendDisconnect, Winsock может потребоваться дождаться сетевого события, прежде чем вызов сможет завершиться. В этой ситуации Winsock выполняет оповещенное ожидание, которое может быть прервано асинхронным вызовом процедуры (APC), запланированным в том же потоке. Выполнение другого блокирующего вызова Winsock внутри APC, который прервал текущий блокирующий вызов Winsock в том же потоке, приведет к неопределенному поведению, и клиенты Winsock никогда не должны пытаться его выполнять.
 

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winsock2.h
Библиотека Ws2_32.lib
DLL Ws2_32.dll

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

Функции Winsock

Справочник по Winsock

connect;

Сокета