From a49ced09b76ab7f3ff92b0888c6a289e44b76212 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Tue, 3 Mar 2026 13:37:04 +0100 Subject: [PATCH 1/2] Propagate bind error stream_socket_server() When stream_socket_server() fails during bind(), we're currently only showing "Unknown error" in the error message. Properly propagate this error for better diagnostics. --- .../network/stream_socket_server_bind_error.phpt | 13 +++++++++++++ main/streams/xp_socket.c | 7 ++++++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 ext/standard/tests/network/stream_socket_server_bind_error.phpt diff --git a/ext/standard/tests/network/stream_socket_server_bind_error.phpt b/ext/standard/tests/network/stream_socket_server_bind_error.phpt new file mode 100644 index 0000000000000..547c3b388796c --- /dev/null +++ b/ext/standard/tests/network/stream_socket_server_bind_error.phpt @@ -0,0 +1,13 @@ +--TEST-- +stream_socket_server() bind error +--FILE-- + +--EXPECTF-- +Warning: stream_socket_server(): Unable to connect to tcp://0.0.0.0:%d (Address already in use) in %s on line %d diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index edf1751ec33b5..9241021285648 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -699,8 +699,13 @@ static inline int php_tcp_sockop_bind(php_stream *stream, php_netstream_data_t * parse_unix_address(xparam, &unix_addr); - return bind(sock->socket, (const struct sockaddr *)&unix_addr, + int result = bind(sock->socket, (const struct sockaddr *)&unix_addr, (socklen_t) XtOffsetOf(struct sockaddr_un, sun_path) + xparam->inputs.namelen); + if (result == -1 && xparam->want_errortext) { + char errstr[256]; + xparam->outputs.error_text = strpprintf(0, "%s", php_socket_strerror_s(errno, errstr, sizeof(errstr))); + } + return result; } #endif From 0647712a2a36ff1e2646e3eb7ed824705e7ba648 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Tue, 3 Mar 2026 14:47:16 +0100 Subject: [PATCH 2/2] Fix test for alpine, and skip for windows --- .../tests/network/stream_socket_server_bind_error.phpt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ext/standard/tests/network/stream_socket_server_bind_error.phpt b/ext/standard/tests/network/stream_socket_server_bind_error.phpt index 547c3b388796c..2f5becb66a91d 100644 --- a/ext/standard/tests/network/stream_socket_server_bind_error.phpt +++ b/ext/standard/tests/network/stream_socket_server_bind_error.phpt @@ -1,5 +1,11 @@ --TEST-- stream_socket_server() bind error +--SKIPIF-- + --FILE-- --EXPECTF-- -Warning: stream_socket_server(): Unable to connect to tcp://0.0.0.0:%d (Address already in use) in %s on line %d +Warning: stream_socket_server(): Unable to connect to tcp://0.0.0.0:%d (Address %r(already )?%rin use) in %s on line %d