Skip to content

Commit fc147ed

Browse files
devnexenkrakjoe
authored andcommitted
sockets exposing TC_DEFER_ACCEPT to optimise tcp exchanges.
1 parent e69729f commit fc147ed

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

UPGRADING

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,9 @@ PHP 8.1 UPGRADE NOTES
421421
MYSQLI_REFRESH_SLAVE, in line with an upstream change in MySQL. The old
422422
constant is still available for backwards-compatibility reasons, but may
423423
be deprecated/removed in the future.
424+
425+
- Sockets:
426+
. TCP_DEFER_ACCEPT socket option added where available.
424427

425428
========================================
426429
11. Changes to INI File Handling

ext/sockets/sockets.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,9 @@ static PHP_MINIT_FUNCTION(sockets)
541541
REGISTER_LONG_CONSTANT("SOMAXCONN", SOMAXCONN, CONST_CS | CONST_PERSISTENT);
542542
#ifdef TCP_NODELAY
543543
REGISTER_LONG_CONSTANT("TCP_NODELAY", TCP_NODELAY, CONST_CS | CONST_PERSISTENT);
544+
#endif
545+
#ifdef TCP_DEFER_ACCEPT
546+
REGISTER_LONG_CONSTANT("TCP_DEFER_ACCEPT", TCP_DEFER_ACCEPT, CONST_CS | CONST_PERSISTENT);
544547
#endif
545548
REGISTER_LONG_CONSTANT("PHP_NORMAL_READ", PHP_NORMAL_READ, CONST_CS | CONST_PERSISTENT);
546549
REGISTER_LONG_CONSTANT("PHP_BINARY_READ", PHP_BINARY_READ, CONST_CS | CONST_PERSISTENT);
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
--TEST--
2+
Test if socket_set_option() works, option:TCP_DEFER_ACCEPT
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded('sockets')) {
6+
die('SKIP sockets extension not available.');
7+
}
8+
if (strpos(PHP_OS, 'Linux') === false) {
9+
die('SKIP on non Linux');
10+
}
11+
?>
12+
--FILE--
13+
<?php
14+
echo "*** Test with TCP_DEFER_ACCEPT with initial SYN/ACK 'timeout' value to rounded up one ***\n";
15+
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
16+
17+
if (!$socket) {
18+
die('Unable to create AF_INET socket [socket]');
19+
}
20+
$initial_val = 5;
21+
var_dump(socket_set_option( $socket, SOL_TCP, TCP_DEFER_ACCEPT, $initial_val));
22+
socket_listen($socket);
23+
$rounded_up_val = socket_get_option( $socket, SOL_TCP, TCP_DEFER_ACCEPT);
24+
socket_close($socket);
25+
var_dump($rounded_up_val > $initial_val); // Value rounded up by the kernel, might differ from kernel version/setting
26+
?>
27+
--EXPECTF--
28+
*** Test with TCP_DEFER_ACCEPT with initial SYN/ACK 'timeout' value to rounded up one ***
29+
bool(true)
30+
bool(true)

0 commit comments

Comments
 (0)