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


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

Функция LPWSPListen устанавливает сокет для прослушивания входящих подключений.

Синтаксис

LPWSPLISTEN Lpwsplisten;

int Lpwsplisten(
  [in]  SOCKET s,
  [in]  int backlog,
  [out] LPINT lpErrno
)
{...}

Параметры

[in] s

Дескриптор, определяющий связанный неподключаемый сокет.

[in] backlog

Максимальная длина, до которой может увеличиваться очередь ожидающих подключений. Если это значение равно SOMAXCONN, поставщик услуг должен установить для невыполненной работы максимальное "разумное" значение. Нет стандартной подготовки для получения фактического значения невыполненной работы.

[out] lpErrno

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

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

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

Код ошибки Значение
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEADDRINUSE
Локальный адрес сокета уже используется, и сокет не помечен, чтобы разрешить повторное использование адреса с SO_REUSEADDR. Эта ошибка обычно возникает во время привязки, но может быть отложена до выполнения этой функции, если **bind** была частично адресом с подстановочными знаками (с ADDR_ANY) и если во время выполнения этой функции необходимо зафиксировать определенный адрес.
WSAEINPROGRESS
Функция вызывается при выполнении обратного вызова.
WSAEINVAL
Сокет не привязан к LPWSPBind.
WSAEISCONN
Сокет уже подключен.
WSAEMFILE
Больше нет доступных дескрипторов сокетов.
WSAENOBUFS
Нет свободного места в буфере.
WSAENOTSOCK
Дескриптор не является сокетом.
WSAEOPNOTSUPP
Указанный сокет не относится к типу, который поддерживает операцию LPWSPListen .

Комментарии

Чтобы принимать подключения, сначала создается сокет с LPWSPSocket , привязанным к локальному адресу с помощью LPWSPBind, невыполненная работа для входящих подключений указывается с помощью LPWSPListen, а затем подключения принимаются с помощью LPWSPAccept. LPWSPListen применяется только к сокетам, ориентированным на подключение (например, SOCK_STREAM). Сокеты переводятся в пассивный режим, когда входящие запросы на подключение подтверждаются и помещаются в очередь в ожидании принятия клиентом SPI сокетов Windows.

Эта функция обычно используется серверами, которые могут одновременно иметь несколько запросов на подключение: если запрос на подключение поступает с заполненной очередью, клиент получит ошибку с указанием WSAECONNREFUSED.

При отсутствии доступных дескрипторов LPWSPListen следует продолжать работать рационально. Он должен принимать подключения до тех пор, пока очередь не будет очищена. Если дескрипторы станут доступными, последующий вызов LPWSPListen или LPWSPAccept по возможности перезаполним очередь до текущей или последней невыполненной работы и возобновит прослушивание входящих подключений.

Клиент WINDOWS Sockets SPI может несколько раз вызывать LPWSPListen в одном сокете. Это влияет на обновление текущей невыполненной работы для прослушивающего сокета. Если ожидающих подключений будет больше, чем новое значение невыполненной работы , избыточные ожидающие подключения будут сброшены и удалены.

Параметр невыполненной работы ограничен (автоматически) разумным значением, определяемым поставщиком услуг. Недопустимые значения заменяются ближайшим допустимым значением. Нет стандартной подготовки для получения фактического значения невыполненной работы.

Требования

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

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

LPWSPAccept

LPWSPConnect

LPWSPSocket