getsockname 子例程

用途

获取套接字名称。

标准 C 库 (libc.a)

语法

#include <sys/socket.h>
int getsockname (Socket, Name, NameLength)
int  Socket;
struct sockaddr * Name;
socklen_t * NameLength;

描述

getsockname 子例程检索指定套接字的本地 界限 地址。 套接字地址表示因特网域中的一个端口号,并存储在 姓名 参数指向的 索卡德尔 结构中。 sys/socket.h 文件定义 sockaddr 数据结构。

由另一个进程创建的进程可以继承打开的套接字。 要使用继承的套接字,创建的进程需要识别其地址。 getsockname 子例程允许一个进程检索绑定到指定套接字的本地地址。

进程可以使用 getpeername 子例程来确定套接字连接中的目标套接字的地址。

参数

描述
套接字 指定期望其本地地址的套接字。
名称 指向包含所指定套接字的本地地址的结构。
NameLength 指定本地地址的大小 (以字节为单位)。 初始化 NameLength 参数所指向的值,以指示 Name 参数所指向的空间量。

返回值

成功完成后,将返回值 0 ,并且 NameLength 参数指向套接字地址的大小。

如果 getsockname 子例程不成功,那么该子例程处理程序将执行以下功能:

  • 会向调用程序返回-1的值。
  • 将错误代码 (指示特定错误) 移动到 错误号 全局变量中。
  • 对于 AF_UNIX 域中的套接字,如果 NameLength 参数的返回值大于 255 ,那么由于 sun_len 字段的位大小限制,将为重载 sockaddr 结构中 sun_len 字段的对应值分配 0xFF 地址。

错误代码

如果发生以下任何错误,那么 getsockname 子例程不成功:

错误 描述
EBADF 插座 参数是无效的。
ENOTSOCK 插座 参数引用的是文件,而不是套接字。
ENOBUFS 系统中没有足够的可用资源来完成调用。
Efault 地址 参数未包含在用户地址空间的可写部分中。