Контекстные опции сокета

Контекстные опции сокетаСписок контекстных опций сокета

Описание

Контекстные опции доступны для всех оберток, которые работают через сокеты, такие как tcp, http и ftp.

Опции

bindto

Используется для указания IP-адреса (IPv4 или IPv6) и\или номера порта, которые PHP будет использовать для подключения к сети. Синтаксис выглядит следующим образом: ip:port для адреса IPv4, и [ip]:port для адреса IPv6. Установка IP и\или порта в 0 позволит системе самой выбрать нужный IP и\или порт.

Замечание:

Так как во время обычной работы FTP создает 2 соединения с сокетами, номер порта не может быть задан с помощью данной опции.

backlog

Используется для ограничения исходящих соединений в очереди соединений сокета.

Замечание:

Используется только для stream_socket_server().

ipv6_v6only

Переопределяет значение ОС по умолчанию для отображения IPv4 в IPv6.

Замечание:

Это важно в случае попытки отдельно слушать IPv4 адреса, в то время как задана привязка к [::].

Применимо только к stream_socket_server().

so_reuseport

Позволяет множественную привязку к одной и той же паре IP:порт, даже из разных процессов.

Замечание:

Применимо только к 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.
7.0.0 Добавлено so_broadcast.
7.0.0 Добавлено so_reuseport.
5.3.3 Добавлено backlog.
5.1.0 Добавлено bindto.

Примеры

Пример #1 Пример использования bindto

<?php
// Соединение с сетью, используя IP '192.168.0.100'
$opts = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:0',
    ),
);


// Соединение с сетью, используя IP '192.168.0.100' и порт '7000'
$opts = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:7000',
    ),
);


// Соединение с сетью, используя IPv6 адрес '2001:db8::1'
// и порт '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);

?>