Функция getsockname (winsock.h)

Функция getsockname извлекает локальное имя сокета.

Синтаксис

int getsockname(
  [in]      SOCKET   s,
  [out]     sockaddr *name,
  [in, out] int      *namelen
);

Параметры

[in] s

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

[out] name

Указатель на структуру SOCKADDR , которая получает адрес (имя) сокета.

[in, out] namelen

Размер буфера имен в байтах.

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

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

Код ошибки Значение
WSANOTINITIALISED
Перед использованием этого API необходимо выполнить успешный вызов WSAStartup .
WSAENETDOWN
Произошел сбой сетевой подсистемы.
WSAEFAULT
Параметр name или namelen не является допустимой частью адресного пространства пользователя или параметр namelen слишком мал.
WSAEINPROGRESS
Выполняется блокирующий вызов Windows Sockets 1.1 или поставщик услуг по-прежнему обрабатывает функцию обратного вызова.
WSAENOTSOCK
Дескриптор не является сокетом.
WSAEINVAL
Сокет не привязан к адресу с привязкой или ADDR_ANY указан в параметре bind , но подключение еще не установлено.

Комментарии

Функция getsockname извлекает текущее имя указанного дескриптора сокета в name. Он используется в связанном или подключенном сокете, заданном параметром s . Возвращается локальная связь. Этот вызов особенно полезен, если был выполнен вызов connect без предварительной привязки ; Функция getsockname предоставляет единственный способ определить локальную связь, заданную системой.

При вызове параметр namelen содержит размер буфера имен в байтах. При возврате параметр namelen содержит фактический размер параметра name в байтах.

Функция getsockname не всегда возвращает сведения об адресе узла, если сокет привязан к неопределенному адресу, если сокет не был подключен с помощью подключения или принятия (например, с помощью ADDR_ANY). Приложение Windows Sockets не должно предполагать, что адрес будет указан, если сокет не подключен. Адрес, который будет использоваться для сокета, неизвестен, если сокет не подключен при использовании в многосетвом узле. Если сокет использует протокол без подключения, адрес может быть недоступен до тех пор, пока в сокете не произойдет ввод-вывод.

Windows Phone 8. Эта функция поддерживается для приложений Магазина Windows Phone на Windows Phone 8 и более поздних версиях.

Windows 8.1 и Windows Server 2012 R2. Эта функция поддерживается для приложений Магазина Windows на Windows 8.1, Windows Server 2012 R2 и более поздних версиях.

Требования

Требование Значение
Минимальная версия клиента Windows 8.1, Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header winsock.h (включая Winsock2.h)
Библиотека Ws2_32.lib
DLL Ws2_32.dll

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

SOCKADDR

Функции Winsock

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

bind

getpeername

Сокета