PHP 大会日本 2024

套接字上下文选项

Socket context options套接字上下文选项列表

描述

套接字上下文选项可用于所有通过套接字工作的包装器,例如 tcphttpftp

选项

bindto

用于指定 PHP 将用于访问网络的 IP 地址(IPv4 或 IPv6)和/或端口号。语法为 IPv4 地址的 ip:port 和 IPv6 地址的 [ip]:port。将 IP 或端口设置为 0 将允许系统选择 IP 和/或端口。

注意:

由于 FTP 在正常操作期间会创建两个套接字连接,因此无法使用此选项指定端口号。

backlog

用于限制套接字监听队列中未完成连接的数量。

注意:

这仅适用于 stream_socket_server()

ipv6_v6only

覆盖操作系统关于将 IPv4 映射到 IPv6 的默认设置。

注意:

这在尝试分别监听 IPv4 地址时尤其重要,而同时存在对 [::] 的绑定。

这仅适用于 stream_socket_server()

so_reuseport

允许将多个绑定到相同的 ip:port 对,即使来自不同的进程。

注意:

这仅适用于 stream_socket_server()

so_broadcast

启用向广播地址发送和接收数据。

注意:

这仅适用于 stream_socket_server()

tcp_nodelay

将此选项设置为 true 将适当地设置 SOL_TCP,NO_DELAY=1,从而禁用 TCP Nagle 算法。

变更日志

版本 描述
7.1.0 添加了 tcp_nodelay
7.0.1 添加了 ipv6_v6only

示例

示例 #1 基本 bindto 用法示例

<?php
// 使用“192.168.0.100”IP 连接到互联网
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:0',
),
);


// 使用“192.168.0.100”IP 和端口“7000”连接到互联网
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:7000',
),
);


// 使用“2001:db8::1”IPv6 地址连接到互联网
// 和端口“7000”
$opts = array(
'socket' => array(
'bindto' => '[2001:db8::1]:7000',
),
);


// 使用端口“7000”连接到互联网
$opts = array(
'socket' => array(
'bindto' => '0:7000',
),
);


// 创建上下文...
$context = stream_context_create($opts);

// ...并使用它来获取数据
echo file_get_contents('http://www.example.com', false, $context);

?>

添加注释

用户贡献的注释 2 条注释

mix at ater dot me
5 年前
强制使用 IPv6 的正确方法是 'bindto' => '[::]:0'
guru at jnt-finland dot fi
9 年前
您可以将“bindto”设置为“0:0”以强制使用 IPv4 而不是 IPv6。并且可能是“[0]:0”以强制使用 IPv6,尽管我无法测试。
To Top