socket_getpeername

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_getpeername查询给定套接字的远程端

说明

socket_getpeername(Socket $socket, string &$address, int &$port = null): bool

查询给定套接字的远程端,这可能会导致主机/端口或 Unix 文件系统路径,具体取决于其类型。

参数

socket

使用 socket_create()socket_accept() 创建的 Socket 实例。

address

如果给定的套接字类型为 AF_INETAF_INET6socket_getpeername() 将以适当的表示法(例如 127.0.0.1fe80::1)在 address 参数中返回对等方(远程)的 *IP 地址*,并且如果提供了可选的 port 参数,还会返回关联的端口。

如果给定的套接字类型为 AF_UNIXsocket_getpeername() 将在 address 参数中返回 Unix 文件系统路径(例如 /var/run/daemon.sock)。

port

如果给出,这将保存与 address 关联的端口。

返回值

成功时返回 true,失败时返回 false。 如果套接字类型不是 AF_INETAF_INET6AF_UNIX 中的任何一个,socket_getpeername() 也可能返回 false,在这种情况下,不会更新最后一个套接字错误代码。

变更日志

版本 说明
8.0.0 socket 现在是 Socket 实例;以前是 resource

注释

注意:

对于使用 socket_accept() 创建的 AF_UNIX 套接字,不应使用 socket_getpeername()。 只有使用 socket_connect() 创建的套接字或在调用 socket_bind() 后的主服务器套接字将返回有意义的值。

注意:

要使 socket_getpeername() 返回有意义的值,它所应用的套接字必须是“对等方”概念有意义的套接字。

参见

添加注释

用户贡献的注释 2 个注释

3
redph0enix at hotmail dot com
20 年前
socket_getpeername 不适用于 UDP 套接字。 相反,使用 socket_recvfrom - 它提供了源服务器的 IP 地址和端口 - 例如

$size=socket_recvfrom($socket,$input,65535,0,$ipaddress,$port);
echo "从 IP $ipaddress 端口 $port 接收 [$input] ($size 字节)\n";
2
匿名
8 年前
它不适用于 UDP 的原因是 UDP 是无状态的;从逻辑上讲,除了发送或接收数据包时,没有其他对等方。 或更严格地说,UDP 套接字可以与 0..N 个对等方交互。
To Top