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 检索特定的错误代码。

错误代码 含义
WSANOTINITIALIZED
在使用此 API 之前,必须成功调用 WSAStartup
WSAENETDOWN
网络子系统发生故障。
WSAEFAULT
namenamelen 参数不是用户地址空间的有效部分,或者 namelen 参数太小。
WSAEINPROGRESS
阻止 Windows 套接字 1.1 调用正在进行,或者服务提供商仍在处理回调函数。
WSAENOTSOCK
:描述符不是套接字。
WSAEINVAL
套接字尚未绑定到具有 绑定的地址,或者在 绑定 中指定了ADDR_ANY,但尚未发生连接。

注解

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

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

当套接字绑定到未指定的地址时,除非套接字已使用连接接受 ((例如使用 ADDR_ANY) )来连接套接字,否则,getsockname 函数并不总是返回有关主机地址的信息。 除非已连接套接字,否则 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
标头 winsock.h (包括 Winsock2.h)
Library Ws2_32.lib
DLL Ws2_32.dll

另请参阅

SOCKADDR

Winsock 函数

Winsock 参考

bind

getpeername

socket