Skip to content

Commit

Permalink
sockets exposing TC_DEFER_ACCEPT to optimise tcp exchanges.
Browse files Browse the repository at this point in the history
  • Loading branch information
devnexen authored and krakjoe committed Jun 9, 2021
1 parent e69729f commit fc147ed
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 0 deletions.
3 changes: 3 additions & 0 deletions UPGRADING
Expand Up @@ -421,6 +421,9 @@ PHP 8.1 UPGRADE NOTES
MYSQLI_REFRESH_SLAVE, in line with an upstream change in MySQL. The old
constant is still available for backwards-compatibility reasons, but may
be deprecated/removed in the future.

- Sockets:
. TCP_DEFER_ACCEPT socket option added where available.

========================================
11. Changes to INI File Handling
Expand Down
3 changes: 3 additions & 0 deletions ext/sockets/sockets.c
Expand Up @@ -541,6 +541,9 @@ static PHP_MINIT_FUNCTION(sockets)
REGISTER_LONG_CONSTANT("SOMAXCONN", SOMAXCONN, CONST_CS | CONST_PERSISTENT);
#ifdef TCP_NODELAY
REGISTER_LONG_CONSTANT("TCP_NODELAY", TCP_NODELAY, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef TCP_DEFER_ACCEPT
REGISTER_LONG_CONSTANT("TCP_DEFER_ACCEPT", TCP_DEFER_ACCEPT, CONST_CS | CONST_PERSISTENT);
#endif
REGISTER_LONG_CONSTANT("PHP_NORMAL_READ", PHP_NORMAL_READ, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PHP_BINARY_READ", PHP_BINARY_READ, CONST_CS | CONST_PERSISTENT);
Expand Down
30 changes: 30 additions & 0 deletions ext/sockets/tests/socket_defer_acp.phpt
@@ -0,0 +1,30 @@
--TEST--
Test if socket_set_option() works, option:TCP_DEFER_ACCEPT
--SKIPIF--
<?php
if (!extension_loaded('sockets')) {
die('SKIP sockets extension not available.');
}
if (strpos(PHP_OS, 'Linux') === false) {
die('SKIP on non Linux');
}
?>
--FILE--
<?php
echo "*** Test with TCP_DEFER_ACCEPT with initial SYN/ACK 'timeout' value to rounded up one ***\n";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if (!$socket) {
die('Unable to create AF_INET socket [socket]');
}
$initial_val = 5;
var_dump(socket_set_option( $socket, SOL_TCP, TCP_DEFER_ACCEPT, $initial_val));
socket_listen($socket);
$rounded_up_val = socket_get_option( $socket, SOL_TCP, TCP_DEFER_ACCEPT);
socket_close($socket);
var_dump($rounded_up_val > $initial_val); // Value rounded up by the kernel, might differ from kernel version/setting
?>
--EXPECTF--
*** Test with TCP_DEFER_ACCEPT with initial SYN/ACK 'timeout' value to rounded up one ***
bool(true)
bool(true)

0 comments on commit fc147ed

Please sign in to comment.