奇怪的是,getsockname() 适用于 socket_create() 和 socket_create_pair() Unix 域 (AF_UNIX) 套接字,如果在创建后调用 socket_bind() 来命名以前匿名的套接字。
使用 socket_bind() 调用还会导致在给定名称下创建一个文件系统“文件”(套接字,在“ls -l”列表中第一个字符为 's')。此类“文件”需要显式删除,因为关闭套接字不会删除它。
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_getsockname — 查询给定套接字的本地端,这可能会导致主机/端口或 Unix 文件系统路径,具体取决于其类型
注意: socket_getsockname() 不应该与使用 socket_connect() 创建的
AF_UNIX
套接字一起使用。只有使用 socket_accept() 创建的套接字或在调用 socket_bind() 后的主要服务器套接字将返回有意义的值。
socket
使用 socket_create() 或 socket_accept() 创建的 Socket 实例。
address
如果给定的套接字类型为 AF_INET
或 AF_INET6
,socket_getsockname() 将以适当的表示法返回本地 *IP 地址*(例如 127.0.0.1
或 fe80::1
)在 address
参数中,如果提供了可选的 port
参数,则还会返回关联的端口。
如果给定的套接字类型为 AF_UNIX
,socket_getsockname() 将在 address
参数中返回 Unix 文件系统路径(例如 /var/run/daemon.sock
)。
port
如果提供,这将保存关联的端口。
成功时返回 true
,失败时返回 false
。如果套接字类型不是 AF_INET
、AF_INET6
或 AF_UNIX
之一,socket_getsockname() 也会返回 false
,在这种情况下,不会更新最后一个套接字错误代码。