mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
socket DF flag on UDP socket via IP_MTU_DISCOVER on Linux and IP_DONTFRAGMENT on FreeBSD for path MTU discovery purpose.
idea proposal via ml : https://marc.info/?l=php-internals&m=167329288509393&w=2 Close GH-10282
This commit is contained in:
parent
55d19eee49
commit
9198e8894b
6 changed files with 128 additions and 1 deletions
1
NEWS
1
NEWS
|
@ -86,6 +86,7 @@ PHP NEWS
|
|||
. Added socket_atmark if send/recv needs using MSG_OOB. (David Carlier)
|
||||
. Added TCP_QUICKACK constant, to give tigher control over
|
||||
ACK delays. (David Carlier)
|
||||
. Added DONTFRAGMENT support for path MTU discovery purpose. (David Carlier)
|
||||
|
||||
- Standard:
|
||||
. E_NOTICEs emitted by unserialize() have been promoted to E_WARNING. (timwolla)
|
||||
|
|
|
@ -117,6 +117,14 @@ PHP 8.3 UPGRADE NOTES
|
|||
- Sockets:
|
||||
. SO_ATTACH_REUSEPORT_CBPF (Linux only).
|
||||
. TCP_QUICKACK (Linux only).
|
||||
. IP_DONTFRAG (FreeBSD only).
|
||||
. IP_MTU_DISCOVER (Linux only).
|
||||
. IP_PMTUDISC_DO (Linux only).
|
||||
. IP_PMTUDISC_DONT (Linux only).
|
||||
. IP_PMTUDISC_WANT (Linux only).
|
||||
. IP_PMTUDISC_PROBE (Linux only).
|
||||
. IP_PMTUDISC_INTERFACE (Linux only).
|
||||
. IP_PMTUDISC_OMIT (Linux only).
|
||||
|
||||
========================================
|
||||
11. Changes to INI File Handling
|
||||
|
|
|
@ -1706,6 +1706,62 @@ const SO_DETACH_BPF = UNKNOWN;
|
|||
*/
|
||||
const TCP_QUICKACK = UNKNOWN;
|
||||
#endif
|
||||
#if defined(IP_DONTFRAG)
|
||||
/**
|
||||
* @var int
|
||||
* @cvalue IP_DONTFRAG
|
||||
*/
|
||||
const IP_DONTFRAG = UNKNOWN;
|
||||
#endif
|
||||
#if defined(IP_MTU_DISCOVER)
|
||||
/**
|
||||
* @var int
|
||||
* @cvalue IP_MTU_DISCOVER
|
||||
*/
|
||||
const IP_MTU_DISCOVER = UNKNOWN;
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_DO)
|
||||
/**
|
||||
* @var int
|
||||
* @cvalue IP_PMTUDISC_DO
|
||||
*/
|
||||
const IP_PMTUDISC_DO = UNKNOWN;
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_DONT)
|
||||
/**
|
||||
* @var int
|
||||
* @cvalue IP_PMTUDISC_DONT
|
||||
*/
|
||||
const IP_PMTUDISC_DONT = UNKNOWN;
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_WANT)
|
||||
/**
|
||||
* @var int
|
||||
* @cvalue IP_PMTUDISC_WANT
|
||||
*/
|
||||
const IP_PMTUDISC_WANT = UNKNOWN;
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_PROBE)
|
||||
/**
|
||||
* @var int
|
||||
* @cvalue IP_PMTUDISC_PROBE
|
||||
*/
|
||||
const IP_PMTUDISC_PROBE = UNKNOWN;
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_INTERFACE)
|
||||
/**
|
||||
* @var int
|
||||
* @cvalue IP_PMTUDISC_INTERFACE
|
||||
*/
|
||||
const IP_PMTUDISC_INTERFACE = UNKNOWN;
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_OMIT)
|
||||
/**
|
||||
* @var int
|
||||
* @cvalue IP_PMTUDISC_OMIT
|
||||
*/
|
||||
const IP_PMTUDISC_OMIT = UNKNOWN;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @strict-properties
|
||||
|
|
26
ext/sockets/sockets_arginfo.h
generated
26
ext/sockets/sockets_arginfo.h
generated
|
@ -1,5 +1,5 @@
|
|||
/* This is a generated file, edit the .stub.php file instead.
|
||||
* Stub hash: abec5e538a69c27451c0cac0a19a92fc6df667eb */
|
||||
* Stub hash: add91c303eddf7518566bc7e6c1698d7198c0d4c */
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_select, 0, 4, MAY_BE_LONG|MAY_BE_FALSE)
|
||||
ZEND_ARG_TYPE_INFO(1, read, IS_ARRAY, 1)
|
||||
|
@ -991,6 +991,30 @@ static void register_sockets_symbols(int module_number)
|
|||
#if defined(TCP_QUICKACK)
|
||||
REGISTER_LONG_CONSTANT("TCP_QUICKACK", TCP_QUICKACK, CONST_PERSISTENT);
|
||||
#endif
|
||||
#if defined(IP_DONTFRAG)
|
||||
REGISTER_LONG_CONSTANT("IP_DONTFRAG", IP_DONTFRAG, CONST_PERSISTENT);
|
||||
#endif
|
||||
#if defined(IP_MTU_DISCOVER)
|
||||
REGISTER_LONG_CONSTANT("IP_MTU_DISCOVER", IP_MTU_DISCOVER, CONST_PERSISTENT);
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_DO)
|
||||
REGISTER_LONG_CONSTANT("IP_PMTUDISC_DO", IP_PMTUDISC_DO, CONST_PERSISTENT);
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_DONT)
|
||||
REGISTER_LONG_CONSTANT("IP_PMTUDISC_DONT", IP_PMTUDISC_DONT, CONST_PERSISTENT);
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_WANT)
|
||||
REGISTER_LONG_CONSTANT("IP_PMTUDISC_WANT", IP_PMTUDISC_WANT, CONST_PERSISTENT);
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_PROBE)
|
||||
REGISTER_LONG_CONSTANT("IP_PMTUDISC_PROBE", IP_PMTUDISC_PROBE, CONST_PERSISTENT);
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_INTERFACE)
|
||||
REGISTER_LONG_CONSTANT("IP_PMTUDISC_INTERFACE", IP_PMTUDISC_INTERFACE, CONST_PERSISTENT);
|
||||
#endif
|
||||
#if defined(IP_PMTUDISC_OMIT)
|
||||
REGISTER_LONG_CONSTANT("IP_PMTUDISC_OMIT", IP_PMTUDISC_OMIT, CONST_PERSISTENT);
|
||||
#endif
|
||||
}
|
||||
|
||||
static zend_class_entry *register_class_Socket(void)
|
||||
|
|
19
ext/sockets/tests/socket_dontfragment.phpt
Normal file
19
ext/sockets/tests/socket_dontfragment.phpt
Normal file
|
@ -0,0 +1,19 @@
|
|||
--TEST--
|
||||
IP_MTU_DISCOVER test
|
||||
--EXTENSIONS--
|
||||
sockets
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (PHP_OS != 'Linux') {
|
||||
die('skip For Linux only');
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
|
||||
socket_bind($socket, '127.0.0.1', 5557);
|
||||
$ret = socket_set_option($socket, IPPROTO_IP, IP_MTU_DISCOVER, IP_PMTUDISC_DO);
|
||||
var_dump($ret);
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
19
ext/sockets/tests/socket_dontfragment_bsd.phpt
Normal file
19
ext/sockets/tests/socket_dontfragment_bsd.phpt
Normal file
|
@ -0,0 +1,19 @@
|
|||
--TEST--
|
||||
IP_DONTFRAG test
|
||||
--EXTENSIONS--
|
||||
sockets
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (PHP_OS != 'FreeBSD') {
|
||||
die('skip For FreeBSD only');
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
|
||||
socket_bind($socket, '127.0.0.1', 5557);
|
||||
$ret = socket_set_option($socket, IPPROTO_IP, IP_DONTFRAG, 1);
|
||||
var_dump($ret);
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
Loading…
Add table
Add a link
Reference in a new issue