Skip to content

Stdlib: stream_socket_shutdown()/get_name()/recvfrom()/sendto() — socket stream phase 2 (ext/standard/streamsfuncs.c) #6043

Closed

Description

@PurHur

Category

stdlib

Problem

Socket stream helpers beyond stream_socket_client() (#3202) are missing. php-src exposes shutdown, peer/name queries, and UDP recv/send helpers on stream resources. HTTP servers, UDP diagnostics, and test harnesses call these directly.

Today function_exists('stream_socket_shutdown') is false on bin/vm.php.

php-src reference

Repro (failure today)

<?php
$server = stream_socket_server('tcp://127.0.0.1:0');
$name = stream_socket_get_name($server, false);
var_export(is_string($name));
echo "\n";
stream_socket_shutdown($server, STREAM_SHUT_RDWR);
var_export(feof($server));
echo "\n";
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php repro.php
php bin/vm.php repro.php'
Runtime stream_socket_get_name stream_socket_shutdown
Zend PHP 8.x true (string) shuts down; feof true
bin/vm.php undefined function undefined function

Scope (this repo)

Area Path
Prerequisite #3202 fsockopen / stream_socket_client
VM ext/standard/stream_socket_*.php delegating to VmFs socket layer
Constants STREAM_SHUT_RD, STREAM_SHUT_WR, STREAM_SHUT_RDWR
Tests test/compliance/cases/stdlib/stream_socket_shutdown.phpt
Matrix script/capability-matrix.php

PHP-in-PHP: socket bookkeeping stays in ext/standard/ + VmFs; thin OS socket ABI only. Do not duplicate logic in lib/AOT/runtime/phpc_stream.c.

Done when

  • TCP repro: get_name returns 127.0.0.1:port; shutdown closes read/write side
  • UDP recvfrom/sendto round-trip on loopback (optional phase 1b PHPT)
  • ./script/ci-fast.sh --filter stream_socket_shutdown green

Verification

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter stream_socket_shutdown'

Related

Activity

  1. added
    enhancementNew feature or request
    phase-4:stdlibPhase 4 – stdlib for web apps
    area:vmVirtual machine
    area:webWeb / CGI / superglobals
    implementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claim
    on Jun 5, 2026
  2. PurHur commented on Jul 14, 2026

    @PurHur
    OwnerAuthor

    claim: cursor-agent-lane-b — starting this run

  3. PurHur commented on Jul 14, 2026

    @PurHur
    OwnerAuthor

    Merged via PR #18777.

    Fix: stream_socket_shutdown() registered on VM — uses shutdown(2) FFI on tracked socket fds (VmSockets::shutdownForFd) with host stream_socket_shutdown() fallback.

    Verification (docker-exec):

    • php bin/vm.php test/compliance/cases/stdlib/stream_socket_shutdown.phpt → 1/1/1/1
    • vendor/bin/phpunit --filter stream_socket_shutdown → OK (2 tests)
    • Issue repro: stream_socket_get_name + stream_socket_shutdown(STREAM_SHUT_RDWR) + feof → true/true

    Follow-up (out of scope): stream_socket_recvfrom / stream_socket_sendto remain unimplemented; JIT lowering not wired yet.

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 machinearea:webWeb / CGI / superglobalsenhancementNew 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