From 85516d181dc7d7dd7dd171962950cce817bb3bc0 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sun, 7 Apr 2024 22:04:55 +0200 Subject: [PATCH] Avoid call to php_socket_errno() if possible This call is only necessary if ret < 0. Note that I also had to reoder the checks for EWOULDBLOCK, EMSGSIZE, EAGAIN to avoid a false positive GCC warning about a duplicate condition (EAGAIN == EWOULDBLOCK on my system). --- ext/openssl/xp_ssl.c | 12 ++++++++---- main/streams/xp_socket.c | 12 ++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index 1ed32563a7c5..8a83455590f6 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -2577,13 +2577,17 @@ static int php_openssl_sockop_set_option(php_stream *stream, int option, int val #else ssize_t ret; #endif - int err; ret = recv(sslsock->s.socket, &buf, sizeof(buf), MSG_PEEK|MSG_DONTWAIT); - err = php_socket_errno(); - if (0 == ret || /* the counterpart did properly shutdown */ - (0 > ret && err != EWOULDBLOCK && err != EAGAIN && err != EMSGSIZE)) { /* there was an unrecoverable error */ + if (0 == ret) { + /* the counterpart did properly shutdown */ alive = 0; + } else if (0 > ret) { + int err = php_socket_errno(); + if (err != EWOULDBLOCK && err != EMSGSIZE && err != EAGAIN) { + /* there was an unrecoverable error */ + alive = 0; + } } } } diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index 9a36a7098da4..3bc375c40f4c 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -373,13 +373,17 @@ static int php_sockop_set_option(php_stream *stream, int option, int value, void #else ssize_t ret; #endif - int err; ret = recv(sock->socket, &buf, sizeof(buf), MSG_PEEK|MSG_DONTWAIT); - err = php_socket_errno(); - if (0 == ret || /* the counterpart did properly shutdown*/ - (0 > ret && err != EWOULDBLOCK && err != EAGAIN && err != EMSGSIZE)) { /* there was an unrecoverable error */ + if (0 == ret) { + /* the counterpart did properly shutdown */ alive = 0; + } else if (0 > ret) { + int err = php_socket_errno(); + if (err != EWOULDBLOCK && err != EMSGSIZE && err != EAGAIN) { + /* there was an unrecoverable error */ + alive = 0; + } } } return alive ? PHP_STREAM_OPTION_RETURN_OK : PHP_STREAM_OPTION_RETURN_ERR;