mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
ext/sockets: socket_shutdown() having proper constants for mode.
close GH-18648
This commit is contained in:
parent
cec079ee72
commit
5a7920ba60
6 changed files with 50 additions and 8 deletions
2
NEWS
2
NEWS
|
@ -214,6 +214,8 @@ PHP NEWS
|
||||||
. Added SO_BUSY_POOL to reduce packets poll latency. (David Carlier)
|
. Added SO_BUSY_POOL to reduce packets poll latency. (David Carlier)
|
||||||
- Added UDP_SEGMENT support to optimise multiple large datagrams over UDP
|
- Added UDP_SEGMENT support to optimise multiple large datagrams over UDP
|
||||||
if the kernel and hardware supports it. (David Carlier)
|
if the kernel and hardware supports it. (David Carlier)
|
||||||
|
- Added SHUT_RD, SHUT_WR and SHUT_RDWR constants for socket_shutdown().
|
||||||
|
(David Carlier)
|
||||||
|
|
||||||
- Sodium:
|
- Sodium:
|
||||||
. Fix overall theorical overflows on zend_string buffer allocations.
|
. Fix overall theorical overflows on zend_string buffer allocations.
|
||||||
|
|
|
@ -452,6 +452,9 @@ PHP 8.5 UPGRADE NOTES
|
||||||
. IP_BINDANY (FreeBSD/NetBSD/OpenBSD only).
|
. IP_BINDANY (FreeBSD/NetBSD/OpenBSD only).
|
||||||
. SO_BUSY_POLL (Linux only).
|
. SO_BUSY_POLL (Linux only).
|
||||||
. UDP_SEGMENT (Linux only).
|
. UDP_SEGMENT (Linux only).
|
||||||
|
- SHUT_RD.
|
||||||
|
- SHUT_WR.
|
||||||
|
- SHUT_RDWR.
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
11. Changes to INI File Handling
|
11. Changes to INI File Handling
|
||||||
|
|
|
@ -2434,6 +2434,11 @@ PHP_FUNCTION(socket_shutdown)
|
||||||
php_sock = Z_SOCKET_P(arg1);
|
php_sock = Z_SOCKET_P(arg1);
|
||||||
ENSURE_SOCKET_VALID(php_sock);
|
ENSURE_SOCKET_VALID(php_sock);
|
||||||
|
|
||||||
|
if (how_shutdown < SHUT_RD || how_shutdown > SHUT_RDWR) {
|
||||||
|
zend_argument_value_error(2, "must be one of SHUT_RD, SHUT_WR or SHUT_RDWR");
|
||||||
|
RETURN_THROWS();
|
||||||
|
}
|
||||||
|
|
||||||
if (shutdown(php_sock->bsd_socket, how_shutdown) != 0) {
|
if (shutdown(php_sock->bsd_socket, how_shutdown) != 0) {
|
||||||
PHP_SOCKET_ERROR(php_sock, "Unable to shutdown socket", errno);
|
PHP_SOCKET_ERROR(php_sock, "Unable to shutdown socket", errno);
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
|
|
|
@ -2030,6 +2030,25 @@ const ETH_P_ALL = UNKNOWN;
|
||||||
const UDP_SEGMENT = UNKNOWN;
|
const UDP_SEGMENT = UNKNOWN;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SHUT_RDWR
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue SHUT_RD
|
||||||
|
*/
|
||||||
|
const SHUT_RD = UNKNOWN;
|
||||||
|
/**
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue SHUT_WR
|
||||||
|
*/
|
||||||
|
const SHUT_WR = UNKNOWN;
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
* @cvalue SHUT_RDWR
|
||||||
|
*/
|
||||||
|
const SHUT_RDWR = UNKNOWN;
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @strict-properties
|
* @strict-properties
|
||||||
* @not-serializable
|
* @not-serializable
|
||||||
|
|
11
ext/sockets/sockets_arginfo.h
generated
11
ext/sockets/sockets_arginfo.h
generated
|
@ -1,5 +1,5 @@
|
||||||
/* This is a generated file, edit the .stub.php file instead.
|
/* This is a generated file, edit the .stub.php file instead.
|
||||||
* Stub hash: 0ff66adfea41b603b9d58f1f0a82a950f4034cc4 */
|
* Stub hash: 7b1baf47dce2fb08faa5616068238ea078d1609b */
|
||||||
|
|
||||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_select, 0, 4, MAY_BE_LONG|MAY_BE_FALSE)
|
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)
|
ZEND_ARG_TYPE_INFO(1, read, IS_ARRAY, 1)
|
||||||
|
@ -1111,6 +1111,15 @@ static void register_sockets_symbols(int module_number)
|
||||||
#if defined(UDP_SEGMENT)
|
#if defined(UDP_SEGMENT)
|
||||||
REGISTER_LONG_CONSTANT("UDP_SEGMENT", UDP_SEGMENT, CONST_PERSISTENT);
|
REGISTER_LONG_CONSTANT("UDP_SEGMENT", UDP_SEGMENT, CONST_PERSISTENT);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(SHUT_RDWR)
|
||||||
|
REGISTER_LONG_CONSTANT("SHUT_RD", SHUT_RD, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
|
#if defined(SHUT_RDWR)
|
||||||
|
REGISTER_LONG_CONSTANT("SHUT_WR", SHUT_WR, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
|
#if defined(SHUT_RDWR)
|
||||||
|
REGISTER_LONG_CONSTANT("SHUT_RDWR", SHUT_RDWR, CONST_PERSISTENT);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static zend_class_entry *register_class_Socket(void)
|
static zend_class_entry *register_class_Socket(void)
|
||||||
|
|
|
@ -19,24 +19,29 @@ $port = 80;
|
||||||
|
|
||||||
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||||
$socketConn = socket_connect($socket, $host, $port);
|
$socketConn = socket_connect($socket, $host, $port);
|
||||||
var_dump(socket_shutdown($socket,0));
|
var_dump(socket_shutdown($socket,SHUT_RD));
|
||||||
socket_close($socket);
|
socket_close($socket);
|
||||||
|
|
||||||
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||||
$socketConn = socket_connect($socket, $host, $port);
|
$socketConn = socket_connect($socket, $host, $port);
|
||||||
var_dump(socket_shutdown($socket,1));
|
var_dump(socket_shutdown($socket,SHUT_WR));
|
||||||
socket_close($socket);
|
socket_close($socket);
|
||||||
|
|
||||||
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||||
$socketConn = socket_connect($socket, $host, $port);
|
$socketConn = socket_connect($socket, $host, $port);
|
||||||
var_dump(socket_shutdown($socket,2));
|
var_dump(socket_shutdown($socket,SHUT_RDWR));
|
||||||
socket_close($socket);
|
socket_close($socket);
|
||||||
|
|
||||||
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||||
var_dump(socket_shutdown($socket,0));
|
var_dump(socket_shutdown($socket,SHUT_RD));
|
||||||
|
|
||||||
$socketConn = socket_connect($socket, $host, $port);
|
$socketConn = socket_connect($socket, $host, $port);
|
||||||
var_dump(socket_shutdown($socket,-1));
|
|
||||||
|
try {
|
||||||
|
socket_shutdown($socket,-1);
|
||||||
|
} catch (\ValueError $e) {
|
||||||
|
echo $e->getMessage(), PHP_EOL;
|
||||||
|
}
|
||||||
socket_close($socket);
|
socket_close($socket);
|
||||||
?>
|
?>
|
||||||
--CLEAN--
|
--CLEAN--
|
||||||
|
@ -54,5 +59,4 @@ bool(true)
|
||||||
Warning: socket_shutdown(): Unable to shutdown socket [%d]: %s in %s on line %d
|
Warning: socket_shutdown(): Unable to shutdown socket [%d]: %s in %s on line %d
|
||||||
bool(false)
|
bool(false)
|
||||||
|
|
||||||
Warning: socket_shutdown(): Unable to shutdown socket [%d]: Invalid argument in %s on line %d
|
must be one of SHUT_RD, SHUT_WR or SHUT_RDWR
|
||||||
bool(false)
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue