Socket options with level IPPROTO_IP and IPPROTO_IPV6 cannot be handled in the same switch statement as options with level SOL_SOCKET since there may be collisions in their numerical values. For example, on ppc64: * IPV6_MULTICAST_HOPS and SO_RCVTIMEO are both 18 * IPV6_MULTICAST_LOOP and SO_SNDTIMEO are both 19 etc. --- php-7.4.4/ext/sockets/sockets.c 2020-03-17 06:40:21.000000000 -0400 +++ php-7.4.4/ext/sockets/sockets.c 2020-03-29 22:39:57.506751737 -0400 @@ -2008,6 +2008,7 @@ PHP_FUNCTION(socket_get_option) } } } + goto handle_default; } #if HAVE_IPV6 else if (level == IPPROTO_IPV6) { @@ -2017,6 +2018,7 @@ PHP_FUNCTION(socket_get_option) } else if (ret == FAILURE) { RETURN_FALSE; } /* else continue */ + goto handle_default; } #endif @@ -2063,6 +2065,7 @@ PHP_FUNCTION(socket_get_option) break; default: + handle_default: optlen = sizeof(other_val); if (getsockopt(php_sock->bsd_socket, level, optname, (char*)&other_val, &optlen) != 0) {