套接字上下文选项

套接字上下文选项套接字上下文选项列表

描述

套接字上下文选项适用于所有通过套接字工作的包装器,例如 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
8 年前
您可以将 "bindto" 设置为 "0:0" 以强制使用 IPv4 而不是 IPv6。可能将 "[0]:0" 强制使用 IPv6,虽然我无法测试这一点。
To Top