(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
socket_get_option — 获取套接字的套接字选项
socket_get_option() 函数检索指定 socket
中由 option
参数指定的选项值。
socket
由 socket_create() 或 socket_accept() 创建的 Socket 实例。
level
level
参数定义选项所在的协议级别。例如,在 socket 级别检索选项,将使用 SOL_SOCKET
作为 level
参数值。在其它级别,例如 TCP,可以使用该级别指定的协议号。协议号可以通过 getprotobyname()
获取。
option
选项 | 描述 | 类型 |
---|---|---|
SO_DEBUG |
是否记录调试信息。 | int |
SO_BROADCAST |
是否支持传输广播消息。 | int |
SO_REUSEADDR |
是否可以复用本地地址。 | int |
SO_REUSEPORT |
是否可以复用本地端口。 | int |
SO_KEEPALIVE |
是否通过定期传输消息来为连接保活。如果连接的套接字对消息未响应,连接将断开,并且正在写入套接字的进程会收到 SIGPIPE 信号。 | int |
SO_LINGER |
如果 l_onoff 不为零,且 l_linger 为零,对于面向连接的套接字,将丢弃所有未发送的数据,并发送给对端一个 RST(reset)报文。 另外,如果 l_onoff 不为零,且 l_linger 不为零,socket_close() 将阻塞,直到数据被发送完或者超过 l_linger 指定的时间。如果 socket 设置为非阻塞,socket_close() 将执行失败并返回错误。 |
array。数组包含两个键: l_onoff 和 l_linger。 |
SO_OOBINLINE |
socket 是否保留带外数据在正常的数据输入队列中。
|
int |
SO_SNDBUF |
发送缓冲区大小。 | int |
SO_RCVBUF |
接收缓冲区大小。 | int |
SO_ERROR |
获取错误状态信息并复位。 | int (不能被 socket_set_option() 设置) |
SO_TYPE |
socket 类型(例如 SOCK_STREAM )。
|
int (不能被 socket_set_option() 设置) |
SO_DONTROUTE |
发出的消息是否绕过标准路由机制。 | int |
SO_RCVLOWAT |
socket 写入操作要处理的最小字节数。
|
int |
SO_RCVTIMEO |
接收超时时间。 | array。数组包含两个键:sec 是超时时间的秒部分,usec 是微秒部分。 |
SO_SNDTIMEO |
指定输出功能阻塞的超时时长,因为流量控制会阻止数据发送。 | array。数组包含两个键:sec 是超时时间的秒部分,usec 是微秒部分。 |
SO_SNDLOWAT |
socket 输出操作要处理的最小字节数。
|
int |
TCP_NODELAY |
是否禁用 TCP Nagle 算法。 | int |
MCAST_JOIN_GROUP |
加入多播组。 |
array 包含 "group" 键,指定 string
类型的 IPv4 或 IPv6 多播地址;另一个键 "interface"
指定(int 类型)接口编号或是 string
类型的接口名称,比如 "eth0" 。可以指定 0
来使用路由规则选择接口。(仅在 socket_set_option() 中使用)
|
MCAST_LEAVE_GROUP |
离开多播组。 |
array。详情见 MCAST_JOIN_GROUP 。(仅在 socket_set_option() 中使用)
|
MCAST_BLOCK_SOURCE |
在已加入的多播组上阻塞接收来自指定源的数据包。 |
array 与 MCAST_JOIN_GROUP
有相同的键,额外增加 string
类型的 source 键,指定要阻塞的 IPv4 或 IPv6 源地址。(仅在 socket_set_option() 中使用)
|
MCAST_UNBLOCK_SOURCE |
在已加入的多播组取消阻塞(继续接收)接收来自指定源的数据包。 |
array 与 MCAST_BLOCK_SOURCE 格式相同。(仅在 socket_set_option() 中使用)
|
MCAST_JOIN_SOURCE_GROUP |
接收源地址与指定多播组匹配的数据包。 |
array 与 MCAST_BLOCK_SOURCE 格式相同。(仅在 socket_set_option() 中使用)
|
MCAST_LEAVE_SOURCE_GROUP |
停止接收源地址与指定多播组匹配的数据包。 |
array 与 MCAST_BLOCK_SOURCE 格式相同。(仅在 socket_set_option() 中使用)
|
IP_MULTICAST_IF |
IPv4 多播数据包的输出接口。 |
使用 int 类型指定接口编号或使用 string
类型指定接口名,例如 eth0 。0
表示选择接口时使用路由表。socket_set_option()
函数返回接口索引。注意,不像 C API,此选项无需提供 IP 地址。这样就消除了 IP_MULTICAST_IF
和 IPV6_MULTICAST_IF 之间的接口差异。
|
IPV6_MULTICAST_IF |
IPv6 多播数据包的输出接口。 |
与 IP_MULTICAST_IF 相同。
|
IP_MULTICAST_LOOP |
在已加入的多播组开启或禁用 IPv4 报文的组播环回策略。类 Unix 中作用于发送路径,Windows 中作用于接收路径。 |
int(0 或 1 )。socket_get_option()
可以接受任何值,并按照常规 PHP 规则转换为布尔值。
|
IPV6_MULTICAST_LOOP |
与 IP_MULTICAST_LOOP 类似,但用于 IPv6。
|
int。详情见 IP_MULTICAST_LOOP 。
|
IP_MULTICAST_TTL |
传出 IPv4 多播数据包的生存时间。这个值需要在 0(数据不传出)到 255 之间。默认值是 1(仅到达本地网络)。 | int 0 到 255 之间。 |
IPV6_MULTICAST_HOPS |
与 IP_MULTICAST_TTL 类似,但用于 IPv6 数据包。-1 也可以被接受,表示使用默认路由。
|
int -1 到 255 之间。 |
SO_MARK |
在套接字上设置标识符,用于过滤 Linux 中的数据包。 | int |
SO_ACCEPTFILTER |
在(FreeBSD 或 NetBSD)监听套接字上添加接受过滤器。FreeBSD 中,需要预先加载接受过滤器内核模块(例如 accf_http)。 | string 过滤器名称(最大长度 15)。 |
SO_USER_COOKIE |
在套接字上设置标识符,用于过滤 FreeBSD 中的数据包。 | int |
SO_RTABLE |
在套接字上设置标识符,用于过滤 OpenBSD 中的数据包。 | int |
SO_DONTTRUNC |
保留未读数据。 | int |
SO_WANTMORE |
当准备好更多数据时给出提示。 | int |
TCP_DEFER_ACCEPT |
在数据准备好之前不通知监听套接字。 | int |
SO_INCOMING_CPU |
获取或设置套接字的 CPU 亲和性。 | int |
SO_MEMINFO |
获取套接字的内存信息。 | int |
SO_BPF_EXTENSIONS |
为套接字附加内核支持的 BPF 扩展。 | int |
SO_SETFIB |
为套接字设置路由表(FIB)。(仅 FreeBSD) | int |
SOL_FILTER |
过滤套接字的属性。(仅 Solaris/Illumos) | int |
TCP_KEEPCNT |
设置 TCP 在断开连接前的最大保活探测次数。 | int |
TCP_KEEPIDLE |
设置连接需要保持空闲的时间。 | int |
TCP_KEEPINTVL |
设置各个保活探针的间隔时间。 | int |
TCP_KEEPALIVE |
设置连接需要保持空闲的时间。(仅 macOS) | int |
TCP_NOTSENT_LOWAT |
设置套接字流数据队列中未发送数据的数量限制。(仅 Linux) | int |
返回给定选项的值, 或者在失败时返回 false
。
示例 #1 socket_get_option() 示例
<?php
$socket = socket_create_listen(1223);
$linger = array('l_linger' => 1, 'l_onoff' => 1);
socket_set_option($socket, SOL_SOCKET, SO_LINGER, $linger);
var_dump(socket_get_option($socket, SOL_SOCKET, SO_REUSEADDR));
?>