PHP Conference China 2020

套接字上下文选项

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

说明

套接字上下文选项可用于所有工作在套接字上的封装协议,像 tcp, httpftp

可选项

bindto

用户 PHP 访问网络的指定的 IP 地址(IPv4 或 IPv6 其中的一个)和/或 端口号,这个语法是 ip:port. Setting the IP or the port to 0 will let the system choose the IP and/or port.

Note:

As FTP creates two socket connections during normal operation, the port number cannot be specified using this option.

backlog

Used to limit the number of outstanding connections in the socket's listen queue.

Note:

This is only applicable to stream_socket_server().

ipv6_v6only

Overrides the OS default regarding mapping IPv4 into IPv6.

Note:

This is important in particular when trying to listen on IPv4 addresses separately while there exists a binding on [::].

This is only applicable to stream_socket_server().

so_reuseport

Allows multiple bindings to a same ip:port pair, even from separate processes.

Note:

This is only applicable to stream_socket_server().

so_broadcast

Enables sending and receiving data to/from broadcast addresses.

Note:

This is only applicable to stream_socket_server().

tcp_nodelay

Setting this option to TRUE will set SOL_TCP,NO_DELAY=1 appropriately, thus disabling the TCP Nagle algorithm.

更新日志

版本 说明
7.1.0 Added tcp_nodelay.
7.0.1 Added ipv6_v6only.
7.0.0 Added so_broadcast.
7.0.0 Added so_reuseport.
5.3.3 Added backlog.
5.1.0 Added bindto.

范例

Example #1 Basic bindto usage example

<?php
// connect to the internet using the '192.168.0.100' IP
$opts = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:0',
    ),
);


// connect to the internet using the '192.168.0.100' IP and port '7000'
$opts = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:7000',
    ),
);


// connect to the internet using the '2001:db8::1' IPv6 address
// and port '7000'
$opts = array(
    
'socket' => array(
        
'bindto' => '[2001:db8::1]:7000',
    ),
);


// connect to the internet using port '7000'
$opts = array(
    
'socket' => array(
        
'bindto' => '0:7000',
    ),
);


// create the context...
$context stream_context_create($opts);

// ...and use it to fetch the data
echo file_get_contents('http://www.example.com'false$context);

?>

add a note add a note

User Contributed Notes 2 notes

up
4
mix at ater dot me
1 year ago
The right way for forcing IPv6 is 'bindto' => '[::]:0'
up
1
guru at jnt-finland dot fi
4 years ago
You can set "bindto" to "0:0" to force use IPv4 instead of IPv6. And probably "[0]:0" to force use IPv6, thou this I couldn't test.
To Top