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 来检索特定的错误代码。
错误代码 | 含义 |
---|---|
在使用此 API 之前,必须成功调用 WSAStartup 。 | |
网络子系统失败。 | |
name 或 namelen 参数不是用户地址空间的有效部分,或者 namelen 参数太小。 | |
阻止 Windows Sockets 1.1 调用正在进行,或者服务提供程序仍在处理回调函数。 | |
:描述符不是套接字。 | |
套接字尚未绑定到具有 绑定的地址,或者在 绑定 中指定了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.1和Windows 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 |