Skip to content

Stdlib: stream_socket_server() — TCP/UDP listening socket streams (ext/standard/streamsfuncs.c parity) #4993

Description

@PurHur

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

  • stream_socket_server('tcp://127.0.0.1:0', $errno, $errstr) returns stream resource on loopback-capable hosts
  • $errno / $errstr populated on failure (e.g. invalid address)
  • fclose($s) succeeds; no host PHP delegation in AOT-linked binary
  • ./script/ci-fast.sh --filter stream_socket_server green
  • Optional follow-up: stream_socket_accept() filed separately if not in same PR

Links

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:vmVirtual machineenhancementNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web apps

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions