1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

ext/sockets: socket_create_pair() simplify workflow. (#18679)

create the pair objects only on success.
This commit is contained in:
David CARLIER
2025-05-28 12:41:48 +01:00
committed by GitHub
parent 25e8aa5cd2
commit c789e9c9f1

View File

@@ -2379,27 +2379,23 @@ PHP_FUNCTION(socket_create_pair)
RETURN_THROWS();
}
object_init_ex(&retval[0], socket_ce);
php_sock[0] = Z_SOCKET_P(&retval[0]);
object_init_ex(&retval[1], socket_ce);
php_sock[1] = Z_SOCKET_P(&retval[1]);
if (socketpair(domain, type, protocol, fds_array) != 0) {
SOCKETS_G(last_error) = errno;
php_error_docref(NULL, E_WARNING, "Unable to create socket pair [%d]: %s", errno, sockets_strerror(errno));
zval_ptr_dtor(&retval[0]);
zval_ptr_dtor(&retval[1]);
RETURN_FALSE;
}
fds_array_zval = zend_try_array_init_size(fds_array_zval, 2);
if (!fds_array_zval) {
zval_ptr_dtor(&retval[0]);
zval_ptr_dtor(&retval[1]);
RETURN_THROWS();
}
object_init_ex(&retval[0], socket_ce);
php_sock[0] = Z_SOCKET_P(&retval[0]);
object_init_ex(&retval[1], socket_ce);
php_sock[1] = Z_SOCKET_P(&retval[1]);
php_sock[0]->bsd_socket = fds_array[0];
php_sock[1]->bsd_socket = fds_array[1];
php_sock[0]->type = domain;