mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +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 UDP_SEGMENT support to optimise multiple large datagrams over UDP
|
||||
if the kernel and hardware supports it. (David Carlier)
|
||||
- Added SHUT_RD, SHUT_WR and SHUT_RDWR constants for socket_shutdown().
|
||||
(David Carlier)
|
||||
|
||||
- Sodium:
|
||||
. Fix overall theorical overflows on zend_string buffer allocations.
|
||||
|
|
|
@ -452,6 +452,9 @@ PHP 8.5 UPGRADE NOTES
|
|||
. IP_BINDANY (FreeBSD/NetBSD/OpenBSD only).
|
||||
. SO_BUSY_POLL (Linux only).
|
||||
. UDP_SEGMENT (Linux only).
|
||||
- SHUT_RD.
|
||||
- SHUT_WR.
|
||||
- SHUT_RDWR.
|
||||
|
||||
========================================
|
||||
11. Changes to INI File Handling
|
||||
|
|
|
@ -2434,6 +2434,11 @@ PHP_FUNCTION(socket_shutdown)
|
|||
php_sock = Z_SOCKET_P(arg1);
|
||||
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) {
|
||||
PHP_SOCKET_ERROR(php_sock, "Unable to shutdown socket", errno);
|
||||
RETURN_FALSE;
|
||||
|
|
|
@ -2030,6 +2030,25 @@ const ETH_P_ALL = UNKNOWN;
|
|||
const UDP_SEGMENT = UNKNOWN;
|
||||
#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
|
||||
* @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.
|
||||
* 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_ARG_TYPE_INFO(1, read, IS_ARRAY, 1)
|
||||
|
@ -1111,6 +1111,15 @@ static void register_sockets_symbols(int module_number)
|
|||
#if defined(UDP_SEGMENT)
|
||||
REGISTER_LONG_CONSTANT("UDP_SEGMENT", UDP_SEGMENT, CONST_PERSISTENT);
|
||||
#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)
|
||||
|
|
|
@ -19,24 +19,29 @@ $port = 80;
|
|||
|
||||
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||
$socketConn = socket_connect($socket, $host, $port);
|
||||
var_dump(socket_shutdown($socket,0));
|
||||
var_dump(socket_shutdown($socket,SHUT_RD));
|
||||
socket_close($socket);
|
||||
|
||||
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||
$socketConn = socket_connect($socket, $host, $port);
|
||||
var_dump(socket_shutdown($socket,1));
|
||||
var_dump(socket_shutdown($socket,SHUT_WR));
|
||||
socket_close($socket);
|
||||
|
||||
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
|
||||
$socketConn = socket_connect($socket, $host, $port);
|
||||
var_dump(socket_shutdown($socket,2));
|
||||
var_dump(socket_shutdown($socket,SHUT_RDWR));
|
||||
socket_close($socket);
|
||||
|
||||
$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);
|
||||
var_dump(socket_shutdown($socket,-1));
|
||||
|
||||
try {
|
||||
socket_shutdown($socket,-1);
|
||||
} catch (\ValueError $e) {
|
||||
echo $e->getMessage(), PHP_EOL;
|
||||
}
|
||||
socket_close($socket);
|
||||
?>
|
||||
--CLEAN--
|
||||
|
@ -54,5 +59,4 @@ bool(true)
|
|||
Warning: socket_shutdown(): Unable to shutdown socket [%d]: %s in %s on line %d
|
||||
bool(false)
|
||||
|
||||
Warning: socket_shutdown(): Unable to shutdown socket [%d]: Invalid argument in %s on line %d
|
||||
bool(false)
|
||||
must be one of SHUT_RD, SHUT_WR or SHUT_RDWR
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue