PHP Conference Nagoya 2025

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

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

Описание

Контекстные опции доступны для всех обёрток, которые работают через сокеты, например: 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.

Примеры

Пример #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);

?>

Добавить

Примечания пользователей 2 notes

up
9
mix at ater dot me
5 years ago
The right way for forcing IPv6 is 'bindto' => '[::]:0'
up
2
guru at jnt-finland dot fi
9 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