Skip to content

Commit 0ba1af9

Browse files
committed
Address code review and fix some issues
1 parent 2738106 commit 0ba1af9

19 files changed

+66
-74
lines changed

UPGRADING

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -466,9 +466,7 @@ PHP 8.0 UPGRADE NOTES
466466
socket_import_stream(), socket_addrinfo_connect(), socket_addrinfo_bind(),
467467
and socket_wsaprotocol_info_import() will now return a Socket object rather
468468
than a resource. Return value checks using is_resource() should be replaced
469-
with checks for `false`. The socket_close() function is deprecated and no
470-
longer has an effect, instead the Socket instance is automatically
471-
destroyed if it is no longer referenced.
469+
with checks for `false`.
472470
. socket_addrinfo_lookup() will now return an array of AddressInfo objects
473471
rather than resources.
474472

ext/sockets/conversions.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1409,7 +1409,6 @@ void to_zval_read_fd_array(const char *data, zval *zv, res_context *ctx)
14091409
return;
14101410
}
14111411
if (S_ISSOCK(statbuf.st_mode)) {
1412-
14131412
object_init_ex(&elem, socket_ce);
14141413
php_socket *sock = Z_SOCKET_P(&elem);
14151414

ext/sockets/sockets.c

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,8 @@ static HashTable *socket_get_gc(zend_object *object, zval **table, int *n)
144144
{
145145
php_socket *socket = socket_from_obj(object);
146146

147-
zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();
148-
149-
zend_get_gc_buffer_add_zval(gc_buffer, &socket->zstream);
150-
zend_get_gc_buffer_use(gc_buffer, table, n);
147+
*table = &socket->zstream;
148+
*n = 1;
151149

152150
return zend_std_get_properties(object);
153151
}
@@ -933,11 +931,26 @@ PHP_FUNCTION(socket_listen)
933931
/* {{{ Closes a file descriptor */
934932
PHP_FUNCTION(socket_close)
935933
{
936-
zval *arg1;
934+
zval *arg1;
935+
php_socket *php_socket;
937936

938937
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &arg1, socket_ce) == FAILURE) {
939938
RETURN_THROWS();
940939
}
940+
941+
php_socket = Z_SOCKET_P(arg1);
942+
943+
if (!Z_ISUNDEF(php_socket->zstream)) {
944+
php_stream *stream = NULL;
945+
php_stream_from_zval_no_verify(stream, &php_socket->zstream);
946+
if (stream != NULL) {
947+
/* close & destroy stream, incl. removing it from the rsrc list;
948+
* resource stored in php_sock->zstream will become invalid */
949+
php_stream_free(stream,
950+
PHP_STREAM_FREE_KEEP_RSRC | PHP_STREAM_FREE_CLOSE |
951+
(stream->is_persistent?PHP_STREAM_FREE_CLOSE_PERSISTENT:0));
952+
}
953+
}
941954
}
942955
/* }}} */
943956

@@ -1236,7 +1249,7 @@ PHP_FUNCTION(socket_connect)
12361249
int retval;
12371250
size_t addr_len;
12381251
zend_long port;
1239-
zend_bool port_is_null;
1252+
zend_bool port_is_null = 1;
12401253

12411254
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|l!", &resource_socket, socket_ce, &addr, &addr_len, &port, &port_is_null) == FAILURE) {
12421255
RETURN_THROWS();
@@ -1249,8 +1262,8 @@ PHP_FUNCTION(socket_connect)
12491262
case AF_INET6: {
12501263
struct sockaddr_in6 sin6 = {0};
12511264

1252-
if (port) {
1253-
zend_argument_value_error(3, "must be specified for the AF_INET6 socket type");
1265+
if (port_is_null) {
1266+
zend_argument_value_error(3, "cannot be null when the socket type is AF_INET6");
12541267
RETURN_THROWS();
12551268
}
12561269

@@ -1271,7 +1284,7 @@ PHP_FUNCTION(socket_connect)
12711284
struct sockaddr_in sin = {0};
12721285

12731286
if (port_is_null) {
1274-
zend_argument_value_error(3, "cannot be null for the AF_INET socket type");
1287+
zend_argument_value_error(3, "cannot be null when the socket type is AF_INET");
12751288
RETURN_THROWS();
12761289
}
12771290

@@ -1461,13 +1474,13 @@ PHP_FUNCTION(socket_send)
14611474
RETURN_THROWS();
14621475
}
14631476

1464-
php_sock = Z_SOCKET_P(arg1);
1465-
14661477
if (len < 0) {
14671478
zend_argument_value_error(3, "must be greater than or equal to 0");
14681479
RETURN_THROWS();
14691480
}
14701481

1482+
php_sock = Z_SOCKET_P(arg1);
1483+
14711484
retval = send(php_sock->bsd_socket, buf, (buf_len < (size_t)len ? buf_len : (size_t)len), flags);
14721485

14731486
if (retval == (size_t)-1) {
@@ -1614,13 +1627,13 @@ PHP_FUNCTION(socket_sendto)
16141627
RETURN_THROWS();
16151628
}
16161629

1617-
php_sock = Z_SOCKET_P(arg1);
1618-
16191630
if (len < 0) {
16201631
zend_argument_value_error(3, "must be greater than or equal to 0");
16211632
RETURN_THROWS();
16221633
}
16231634

1635+
php_sock = Z_SOCKET_P(arg1);
1636+
16241637
switch (php_sock->type) {
16251638
case AF_UNIX:
16261639
memset(&s_un, 0, sizeof(s_un));
@@ -2240,7 +2253,7 @@ PHP_FUNCTION(socket_export_stream)
22402253
PHP_FUNCTION(socket_addrinfo_lookup)
22412254
{
22422255
char *service = NULL;
2243-
size_t service_len;
2256+
size_t service_len = 0;
22442257
zend_string *hostname, *key;
22452258
zval *hint, *zhints = NULL;
22462259

ext/sockets/sockets.stub.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ function socket_set_block(Socket $socket): bool {}
2222

2323
function socket_listen(Socket $socket, int $backlog = 0): bool {}
2424

25-
/** @deprecated */
2625
function socket_close(Socket $socket): void {}
2726

2827
function socket_write(Socket $socket, string $buf, ?int $length = null): int|false {}

ext/sockets/sockets_arginfo.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 1b2cbff950087492186cb8c216864b6e51abcf28 */
2+
* Stub hash: 330b05ad9ceaeeb5093c01c307a866f587d41577 */
33

44
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_socket_select, 0, 4, MAY_BE_LONG|MAY_BE_FALSE)
55
ZEND_ARG_TYPE_INFO(1, read_fds, IS_ARRAY, 1)
@@ -266,7 +266,7 @@ static const zend_function_entry ext_functions[] = {
266266
ZEND_FE(socket_set_nonblock, arginfo_socket_set_nonblock)
267267
ZEND_FE(socket_set_block, arginfo_socket_set_block)
268268
ZEND_FE(socket_listen, arginfo_socket_listen)
269-
ZEND_DEP_FE(socket_close, arginfo_socket_close)
269+
ZEND_FE(socket_close, arginfo_socket_close)
270270
ZEND_FE(socket_write, arginfo_socket_write)
271271
ZEND_FE(socket_read, arginfo_socket_read)
272272
ZEND_FE(socket_getsockname, arginfo_socket_getsockname)

ext/sockets/tests/bug76839.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ for ($i = 0; $i < 10; $i++) {
3737
socket_sendto($receiverSocket, 'Pong!', 5, 0, $from);
3838
echo "Responded to sender with 'Pong!'\n";
3939

40-
@socket_close($receiverSocket);
40+
socket_close($receiverSocket);
4141
unlink($receiverSocketPath);
42-
@socket_close($senderSocket);
42+
socket_close($senderSocket);
4343
unlink($senderSocketPath);
4444
}
4545
--EXPECT--

ext/sockets/tests/ipv4loop.phpt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,3 @@ IPv4 Loopback test
5151
--EXPECT--
5252
string(10) "ABCdef123
5353
"
54-
55-
Deprecated: Function socket_close() is deprecated
56-
57-
Deprecated: Function socket_close() is deprecated
58-
59-
Deprecated: Function socket_close() is deprecated

ext/sockets/tests/ipv6loop.phpt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,3 @@ IPv6 Loopback test
5555
--EXPECT--
5656
string(10) "ABCdef123
5757
"
58-
59-
Deprecated: Function socket_close() is deprecated
60-
61-
Deprecated: Function socket_close() is deprecated
62-
63-
Deprecated: Function socket_close() is deprecated

ext/sockets/tests/socket_cmsg_rights.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ if ($data["control"]) {
6161
if ($control["level"] == SOL_SOCKET &&
6262
$control["type"] == SCM_RIGHTS) {
6363
foreach ($control["data"] as $resource) {
64-
if (!is_object($resource)) {
64+
if (!is_resource($resource)) {
6565
echo "FAIL RES\n";
6666
var_dump($data);
6767
exit;

ext/sockets/tests/socket_connect_params.phpt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,21 @@ socket_getsockname($s_c, $addr, $port);
1717

1818
// wrong parameter count
1919
try {
20-
$s_w = socket_connect($s_c);
20+
socket_connect($s_c);
2121
} catch (\ArgumentCountError $e) {
2222
echo $e->getMessage() . \PHP_EOL;
2323
}
2424
try {
25-
$s_w = socket_connect($s_c, '0.0.0.0');
25+
socket_connect($s_c, '0.0.0.0');
2626
} catch (\ValueError $e) {
2727
echo $e->getMessage() . \PHP_EOL;
2828
}
2929
$s_w = socket_connect($s_c, '0.0.0.0', $port);
3030

3131
socket_close($s_c);
32-
3332
?>
3433
--EXPECTF--
3534
socket_connect() expects at least 2 parameters, 1 given
36-
socket_connect(): Argument #3 ($port) must be specified for the AF_INET socket type
35+
socket_connect(): Argument #3 ($port) cannot be null when the socket type is AF_INET
3736

3837
Warning: socket_connect(): unable to connect [%i]: %a in %s on line %d

ext/sockets/tests/socket_export_stream-1.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var_dump($stream);
2020
socket_write($s1, "test message");
2121
socket_close($s1);
2222

23-
var_dump(stream_get_contents($stream));
23+
//var_dump(stream_get_contents($stream));
2424
--EXPECTF--
2525
resource(%d) of type (stream)
2626
string(12) "test message"

ext/sockets/tests/socket_export_stream-2.phpt

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,27 @@ if (!extension_loaded('sockets')) {
99
<?php
1010

1111
try {
12-
var_dump(socket_export_stream(fopen(__FILE__, "rb")));
12+
socket_export_stream(fopen(__FILE__, "rb"));
1313
} catch (TypeError $e) {
1414
echo $e->getMessage(), "\n";
1515
}
1616
try {
17-
var_dump(socket_export_stream(stream_socket_server("udp://127.0.0.1:0", $errno, $errstr, STREAM_SERVER_BIND)));
17+
socket_export_stream(stream_socket_server("udp://127.0.0.1:0", $errno, $errstr, STREAM_SERVER_BIND));
1818
} catch (TypeError $e) {
1919
echo $e->getMessage(), "\n";
2020
}
2121
$s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
2222
var_dump($s);
2323
socket_close($s);
24-
try {
25-
var_dump(socket_export_stream($s));
26-
} catch (TypeError $e) {
27-
echo $e->getMessage(), "\n";
28-
}
2924

25+
var_dump(socket_export_stream($s));
3026

3127
echo "Done.";
3228
?>
3329
--EXPECTF--
34-
socket_export_stream(): supplied resource is not a valid Socket resource
35-
socket_export_stream(): supplied resource is not a valid Socket resource
30+
socket_export_stream(): Argument #1 ($socket) must be of type Socket, resource given
31+
socket_export_stream(): Argument #1 ($socket) must be of type Socket, resource given
3632
object(Socket)#%d (0) {
3733
}
38-
socket_export_stream(): supplied resource is not a valid Socket resource
34+
resource(7) of type (stream)
3935
Done.

ext/sockets/tests/socket_export_stream-4.phpt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,11 @@ Warning: socket_get_option(): Unable to retrieve socket option [%d]: %s in %s on
105105
close socket
106106
stream_set_blocking stream_set_blocking(): supplied resource is not a valid stream resource
107107

108-
socket_set_block socket_set_block(): supplied resource is not a valid Socket resource
108+
socket_set_block
109+
Warning: socket_set_block(): unable to set blocking mode [9]: Bad file descriptor in %s on line %d
109110

110-
socket_get_option socket_get_option(): supplied resource is not a valid Socket resource
111+
socket_get_option
112+
Warning: socket_get_option(): Unable to retrieve socket option [9]: Bad file descriptor in %s on line %d
111113

112114

113115
Done.

ext/sockets/tests/socket_import_stream-2.phpt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ if (!extension_loaded('sockets')) {
1010

1111
var_dump(socket_import_stream(fopen(__FILE__, "rb")));
1212
try {
13-
var_dump(socket_import_stream(socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)));
13+
socket_import_stream(socket_create(AF_INET, SOCK_DGRAM, SOL_UDP));
1414
} catch (TypeError $e) {
1515
echo $e->getMessage(), "\n";
1616
}
1717
$s = stream_socket_server("udp://127.0.0.1:0", $errno, $errstr, STREAM_SERVER_BIND);
1818
var_dump($s);
1919
var_dump(fclose($s));
2020
try {
21-
var_dump(socket_import_stream($s));
21+
socket_import_stream($s);
2222
} catch (TypeError $e) {
2323
echo $e->getMessage(), "\n";
2424
}
@@ -28,7 +28,7 @@ echo "Done.";
2828
--EXPECTF--
2929
Warning: socket_import_stream(): Cannot represent a stream of type STDIO as a Socket Descriptor in %s on line %d
3030
bool(false)
31-
socket_import_stream(): supplied resource is not a valid stream resource
31+
socket_import_stream(): Argument #1 ($stream) must be of type resource, Socket given
3232
resource(%d) of type (stream)
3333
bool(true)
3434
socket_import_stream(): supplied resource is not a valid stream resource

ext/sockets/tests/socket_import_stream-4.phpt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,11 @@ Warning: socket_get_option(): Unable to retrieve socket option [%d]: %s in %s on
100100
close socket
101101
stream_set_blocking stream_set_blocking(): supplied resource is not a valid stream resource
102102

103-
socket_set_block socket_set_block(): supplied resource is not a valid Socket resource
103+
socket_set_block
104+
Warning: socket_set_block(): unable to set blocking mode [9]: Bad file descriptor in %s on line %d
104105

105-
socket_get_option socket_get_option(): supplied resource is not a valid Socket resource
106+
socket_get_option
107+
Warning: socket_get_option(): Unable to retrieve socket option [9]: Bad file descriptor in %s on line %d
106108

107109

108110
Done.

ext/sockets/tests/socket_select-wrongparams-2.phpt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@ $sockets = null;
1111
$write = null;
1212
$except = null;
1313
$time = 0;
14-
var_dump(socket_select($sockets, $write, $except, $time));
14+
15+
try {
16+
socket_select($sockets, $write, $except, $time);
17+
} catch (ValueError $exception) {
18+
echo $exception->getMessage() . "\n";
19+
}
1520
--EXPECTF--
16-
Warning: socket_select(): No resource arrays were passed to select in %s on line %d
17-
bool(false)
21+
socket_select(): At least one array argument must be passed
1822
--CREDITS--
1923
Till Klampaeckel, [email protected]
2024
Berlin TestFest 2009

ext/sockets/tests/socket_select_error.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ try {
1414
}
1515
?>
1616
--EXPECT--
17-
socket_select(): supplied argument is not a valid Socket resource
17+
socket_select(): Argument #1 ($read_fds) must only have elements of type Socket, string given

ext/sockets/tests/socket_set_block-retval.phpt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,12 @@ socket_close($socket);
1515

1616
$socket2 = socket_create_listen(31340);
1717
socket_close($socket2);
18-
try {
19-
var_dump(socket_set_block($socket2));
20-
} catch (TypeError $e) {
21-
echo $e->getMessage(), "\n";
22-
}
18+
var_dump(socket_set_block($socket2));
2319

2420
?>
2521
--EXPECT--
2622
bool(true)
27-
socket_set_block(): supplied resource is not a valid Socket resource
23+
bool(true)
2824
--CREDITS--
2925
Robin Mehner, [email protected]
3026
PHP Testfest Berlin 2009-05-09

ext/sockets/tests/socket_set_nonblock-retval.phpt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,12 @@ socket_close($socket);
1515

1616
$socket2 = socket_create_listen(31340);
1717
socket_close($socket2);
18-
try {
19-
var_dump(socket_set_nonblock($socket2));
20-
} catch (TypeError $e) {
21-
echo $e->getMessage(), "\n";
22-
}
18+
var_dump(socket_set_nonblock($socket2));
2319

2420
?>
2521
--EXPECT--
2622
bool(true)
27-
socket_set_nonblock(): supplied resource is not a valid Socket resource
23+
bool(true)
2824
--CREDITS--
2925
Robin Mehner, [email protected]
3026
PHP Testfest Berlin 2009-05-09

0 commit comments

Comments
 (0)