Category
stdlib | bootstrap
Problem
stream_socket_server() is undefined in this compiler (function_exists('stream_socket_server') → false). Zend returns a stream resource bound to a listening socket; stream_socket_accept() (follow-up) accepts client connections.
This blocks self-host web paths that must run without host PHP:
lib/Web/DevServer.php, lib/Web/FastCgi/Listener.php call stream_socket_server() today (host PHP in tests only)
- Smoke scripts under
script/examples-*-smoke.sh probe loopback via host \stream_socket_server
Complements client-side #3202 (stream_socket_client / fsockopen) and #3399 (ext/sockets OOP API).
php-src reference
Repro (today)
<?php
$errno = 0;
$errstr = '';
$s = @stream_socket_server('tcp://127.0.0.1:0', $errno, $errstr);
var_dump(is_resource($s), $errno, $errstr);
if (is_resource($s)) {
fclose($s);
}
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php -r "var_dump(function_exists(\"stream_socket_server\"));"
php bin/vm.php repro.php
'
| Engine |
Expected |
| Zend PHP 8.x |
bool(true) resource; $errno === 0 on loopback bind |
| This compiler |
Call to undefined function stream_socket_server() |
Scope (this repo)
| Layer |
Path |
| VM |
ext/standard/stream_socket_server.php (new) — reuse stream resource type from fopen |
| Helper |
shared socket transport with #3202 client (ext/standard/VmStreamSocket.php or extend VmFs.php) |
| Registration |
ext/standard/Module.php |
| Bootstrap |
lib/Web/DevServer.php, lib/Web/FastCgi/Listener.php must compile without host \stream_socket_server |
| Tests |
test/compliance/cases/stdlib/stream_socket_server_tcp.phpt (bind 127.0.0.1:0, close) |
| Matrix |
script/capability-matrix.php |
Done when
Links
Category
stdlib|bootstrapProblem
stream_socket_server()is undefined in this compiler (function_exists('stream_socket_server')→ false). Zend returns a stream resource bound to a listening socket;stream_socket_accept()(follow-up) accepts client connections.This blocks self-host web paths that must run without host PHP:
lib/Web/DevServer.php,lib/Web/FastCgi/Listener.phpcallstream_socket_server()today (host PHP in tests only)script/examples-*-smoke.shprobe loopback via host\stream_socket_serverComplements client-side #3202 (
stream_socket_client/fsockopen) and #3399 (ext/socketsOOP API).php-src reference
ext/standard/streamsfuncs.c—PHP_FUNCTION(stream_socket_server)main/streams/xp_socket.c— transport listen/acceptext/standard/basic_functions.c—stream_socket_accept(optional phase 2)Repro (today)
bool(true)resource;$errno === 0on loopback bindCall to undefined function stream_socket_server()Scope (this repo)
ext/standard/stream_socket_server.php(new) — reuse stream resource type fromfopenext/standard/VmStreamSocket.phpor extendVmFs.php)ext/standard/Module.phplib/Web/DevServer.php,lib/Web/FastCgi/Listener.phpmust compile without host\stream_socket_servertest/compliance/cases/stdlib/stream_socket_server_tcp.phpt(bind127.0.0.1:0, close)script/capability-matrix.phpDone when
stream_socket_server('tcp://127.0.0.1:0', $errno, $errstr)returns stream resource on loopback-capable hosts$errno/$errstrpopulated on failure (e.g. invalid address)fclose($s)succeeds; no host PHP delegation in AOT-linked binary./script/ci-fast.sh --filter stream_socket_servergreenstream_socket_accept()filed separately if not in same PRLinks