getsockname 函数 (winsock2.h)

getsockname 函数检索套接字的本地名称。

语法

int WSAAPI 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
namenamelen 参数不是用户地址空间的有效部分,或者 namelen 参数太小。
WSAEINPROGRESS
阻止 Windows Sockets 1.1 调用正在进行,或者服务提供程序仍在处理回调函数。
WSAENOTSOCK
:描述符不是套接字。
WSAEINVAL
套接字尚未绑定到具有 绑定的地址,或者在 绑定 中指定了ADDR_ANY,但尚未发生连接。

注解

getsockname 函数检索名称中指定套接字描述符的当前名称。 它在 s 参数指定的绑定或连接的套接字上使用。 返回本地关联。 在未先执行绑定的情况下进行连接调用时,此调用特别有用;getsockname 函数提供了确定系统设置的本地关联的唯一方法。

调用时, namelen 参数包含 名称 缓冲区的大小(以字节为单位)。 返回时, namelen 参数包含 name 参数的实际大小(以字节为单位)。

当套接字绑定到未指定的地址时, getsockname 函数不会始终返回有关主机地址的信息,除非套接字已使用 connect 连接或 接受 (例如,使用 ADDR_ANY) 。 除非已连接套接字,否则 Windows 套接字应用程序不得假定将指定地址。 将用于套接字的地址未知,除非在多宿主主机中使用套接字时已连接。 如果套接字使用无连接协议,则在套接字出现 I/O 之前,该地址可能不可用。

Windows Phone 8:Windows Phone 8 及更高版本上的 Windows Phone 应用商店应用支持此函数。

Windows 8.1Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更高版本的 Windows 应用商店应用支持此函数。

要求

要求
最低受支持的客户端 Windows 8.1、Windows Vista [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 winsock2.h (包括 Winsock2.h)
Library Ws2_32.lib
DLL Ws2_32.dll

另请参阅

SOCKADDR

Winsock 函数

Winsock 参考

bind

getpeername

socket