Skip to content

Commit 5a7920b

Browse files
committed
ext/sockets: socket_shutdown() having proper constants for mode.
close GH-18648
1 parent cec079e commit 5a7920b

File tree

6 files changed

+50
-8
lines changed

6 files changed

+50
-8
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,8 @@ PHP NEWS
214214
. Added SO_BUSY_POOL to reduce packets poll latency. (David Carlier)
215215
- Added UDP_SEGMENT support to optimise multiple large datagrams over UDP
216216
if the kernel and hardware supports it. (David Carlier)
217+
- Added SHUT_RD, SHUT_WR and SHUT_RDWR constants for socket_shutdown().
218+
(David Carlier)
217219

218220
- Sodium:
219221
. Fix overall theorical overflows on zend_string buffer allocations.

UPGRADING

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,9 @@ PHP 8.5 UPGRADE NOTES
452452
. IP_BINDANY (FreeBSD/NetBSD/OpenBSD only).
453453
. SO_BUSY_POLL (Linux only).
454454
. UDP_SEGMENT (Linux only).
455+
- SHUT_RD.
456+
- SHUT_WR.
457+
- SHUT_RDWR.
455458

456459
========================================
457460
11. Changes to INI File Handling

ext/sockets/sockets.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2434,6 +2434,11 @@ PHP_FUNCTION(socket_shutdown)
24342434
php_sock = Z_SOCKET_P(arg1);
24352435
ENSURE_SOCKET_VALID(php_sock);
24362436

2437+
if (how_shutdown < SHUT_RD || how_shutdown > SHUT_RDWR) {
2438+
zend_argument_value_error(2, "must be one of SHUT_RD, SHUT_WR or SHUT_RDWR");
2439+
RETURN_THROWS();
2440+
}
2441+
24372442
if (shutdown(php_sock->bsd_socket, how_shutdown) != 0) {
24382443
PHP_SOCKET_ERROR(php_sock, "Unable to shutdown socket", errno);
24392444
RETURN_FALSE;

ext/sockets/sockets.stub.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2030,6 +2030,25 @@
20302030
const UDP_SEGMENT = UNKNOWN;
20312031
#endif
20322032

2033+
#ifdef SHUT_RDWR
2034+
/**
2035+
* @var int
2036+
* @cvalue SHUT_RD
2037+
*/
2038+
const SHUT_RD = UNKNOWN;
2039+
/**
2040+
/**
2041+
* @var int
2042+
* @cvalue SHUT_WR
2043+
*/
2044+
const SHUT_WR = UNKNOWN;
2045+
/**
2046+
* @var int
2047+
* @cvalue SHUT_RDWR
2048+
*/
2049+
const SHUT_RDWR = UNKNOWN;
2050+
#endif
2051+
20332052
/**
20342053
* @strict-properties
20352054
* @not-serializable

ext/sockets/sockets_arginfo.h

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/sockets/tests/socket_shutdown.phpt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,29 @@ $port = 80;
1919

2020
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
2121
$socketConn = socket_connect($socket, $host, $port);
22-
var_dump(socket_shutdown($socket,0));
22+
var_dump(socket_shutdown($socket,SHUT_RD));
2323
socket_close($socket);
2424

2525
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
2626
$socketConn = socket_connect($socket, $host, $port);
27-
var_dump(socket_shutdown($socket,1));
27+
var_dump(socket_shutdown($socket,SHUT_WR));
2828
socket_close($socket);
2929

3030
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
3131
$socketConn = socket_connect($socket, $host, $port);
32-
var_dump(socket_shutdown($socket,2));
32+
var_dump(socket_shutdown($socket,SHUT_RDWR));
3333
socket_close($socket);
3434

3535
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
36-
var_dump(socket_shutdown($socket,0));
36+
var_dump(socket_shutdown($socket,SHUT_RD));
3737

3838
$socketConn = socket_connect($socket, $host, $port);
39-
var_dump(socket_shutdown($socket,-1));
39+
40+
try {
41+
socket_shutdown($socket,-1);
42+
} catch (\ValueError $e) {
43+
echo $e->getMessage(), PHP_EOL;
44+
}
4045
socket_close($socket);
4146
?>
4247
--CLEAN--
@@ -54,5 +59,4 @@ bool(true)
5459
Warning: socket_shutdown(): Unable to shutdown socket [%d]: %s in %s on line %d
5560
bool(false)
5661

57-
Warning: socket_shutdown(): Unable to shutdown socket [%d]: Invalid argument in %s on line %d
58-
bool(false)
62+
must be one of SHUT_RD, SHUT_WR or SHUT_RDWR

0 commit comments

Comments
 (0)