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


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

Функция LPWSPBind связывает локальный адрес (то есть имя) с сокетом.

Синтаксис

LPWSPBIND Lpwspbind;

int Lpwspbind(
  [in]  SOCKET s,
  [in]  const sockaddr *name,
  [in]  int namelen,
  [out] LPINT lpErrno
)
{...}

Параметры

[in] s

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

[in] name

Адрес, назначаемый сокету в виде структуры sockaddr .

За исключением sa_family члена, содержимое sockaddr выражается в порядке байтов сети. В Windows Sockets 2 параметр name не интерпретируется как указатель на структуру sockaddr . Он приведен таким образом для совместимости Winsock. Фактическая структура интерпретируется по-разному в контексте различных семейств адресов. Единственными требованиями являются то, что первым u_short является семейство адресов, а общий размер буфера памяти (в байтах) — namelen.

[in] namelen

Длина (в байтах) структуры, на которую указывает параметр name .

[out] lpErrno

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

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

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

Код ошибки Значение
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEADDRINUSE
Некоторые процессы на локальном компьютере уже привязаны к тому же полному адресу (например, IP-адресу и порту в случае **AF_INET**), а сокет не был помечен для разрешения повторного использования адреса с SO_REUSEADDR. (См. параметр сокета SO_REUSEADDR в разделе LPWSPSetSockOpt.)
WSAEADDRNOTAVAIL
Указанный адрес не является допустимым адресом для этого компьютера.
WSAEFAULT
Параметр name или namelen не является допустимой частью адресного пространства пользователя, параметр namelen слишком мал, параметр name содержит неправильный формат адреса для связанного семейства адресов или первые два байта блока памяти, указанного именем , не соответствуют семейству адресов, связанному с дескрипторов сокета.
WSAEINPROGRESS
Функция вызывается при выполнении обратного вызова.
WSAEINVAL
Сокет уже привязан к адресу.
WSAENOBUFS
Недостаточно буферов, слишком много подключений.
WSAENOTSOCK
Дескриптор не является сокетом.

Комментарии

Функция LPWSPBind используется в сокете без подключения или сокете, ориентированном на подключение, перед последующими вызовами функций LPWSPConnect или LPWSPListen . Когда сокет создается с помощью LPWSPSocket, он существует в пространстве имен (семействе адресов), но ему не назначено имя или локальный адрес. Функция LPWSPBind устанавливает локальную связь сокета, присваивая локальное имя неименованного сокета.

Например, в семействе адресов Интернета имя состоит из трех частей: семейства адресов, адреса узла и номера порта, идентифицирующий клиент Winsock SPI. В Windows Sockets 2 параметр name не интерпретируется как указатель на структуру sockaddr . Поставщики услуг могут рассматривать его как указатель на блок памяти с размером namelen. Первые два байта в этом блоке (соответствующие sa_family в объявлении sockaddr ) должны содержать семейство адресов, которое использовалось для создания сокета. В противном случае будет указана ошибка WSAEFAULT .

Если клиенту WINDOWS Sockets 2 SPI не важно, какой локальный адрес ему назначен, он будет указывать значение константы манифеста ADDR_ANY для элемента sa_data параметра name . Это указывает поставщику услуг использовать любой соответствующий сетевой адрес. Для TCP/IP, если порт указан как нуль, поставщик услуг назначит уникальный порт клиенту Winsock SPI со значением от 1024 до 5000. Клиент SPI может использовать LPWSPGetSockName после LPWSPBind , чтобы узнать адрес и назначенный ему порт. Однако обратите внимание, что если интернет-адрес равен INADDR_ANY, LPWSPGetSockOpt не обязательно сможет указать адрес, пока сокет не будет подключен, так как несколько адресов могут быть допустимыми, если узел является многосетевым.

Требования

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

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

sockaddr

LPWSPConnect

LPWSPGetSockName

LPWSPListen

WSPSetSockOpt

LPWSPSocket