ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ сокСта

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ сокСта β€” Бписок контСкстных ΠΎΠΏΡ†ΠΈΠΉ сокСта

ОписаниС

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ доступны для всСх ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· сокСты, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: 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
11
mix at ater dot me ΒΆ
7 years ago
The right way for forcing IPv6 is 'bindto' => '[::]:0'
up
3
guru at jnt-finland dot fi ΒΆ
10 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.