Skip to content

Stdlib: pfsockopen() persistent TCP sockets (#3384) - #7957

Merged
PurHur merged 1 commit into
masterfrom
agent/stdlib-pfsockopen-3384
Jun 11, 2026
Merged

PurHur merged 1 commit into
masterfrom
agent/stdlib-pfsockopen-3384

Conversation

@PurHur

@PurHur PurHur commented Jun 11, 2026

Copy link
Copy Markdown
Owner

Summary

  • Implement pfsockopen() in ext/standard/pfsockopen.php by delegating connect + persistence to host \pfsockopen() and adopting the stream into VmFs (php-src ext/standard/fsock.c parity).
  • Add VmFs host-resource refcounting so repeated persistent opens sharing the same underlying host stream fclose() safely (required when host returns identical resource for same host:port).
  • Add compliance PHPT + PfsockopenBuiltinTest (including ephemeral-server reuse probe).

php-src reference

  • ext/standard/fsock.cPHP_FUNCTION(pfsockopen)
  • main/streams/streams.c — persistent stream list (php_stream_popen)

PHP implementation

  • ext/standard/pfsockopen.php — VM builtin
  • ext/standard/VmPersistentSocket.php — stream URI helper
  • ext/standard/VmFs.php — shared host-resource refcount on adopt/fclose

Verification

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php -r "var_dump(function_exists(\"pfsockopen\"));"
php bin/vm.php -r "var_dump(function_exists(\"pfsockopen\"));"
'
# bool(true)
# bool(true)

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter PfsockopenBuiltinTest'
# OK (2 tests, 4 assertions)

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter stream_socket_client_context'
# OK (2 tests, 2 assertions) — refcount regression check

Closes #3384

Made with Cursor

Delegate connect/persistence to host pfsockopen and adopt into VmFs; add
host-resource refcounting so duplicate persistent handles fclose safely.

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit c705b65 into master Jun 11, 2026
@PurHur
PurHur deleted the agent/stdlib-pfsockopen-3384 branch June 11, 2026 06:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Stdlib: pfsockopen() — persistent TCP socket streams (ext/standard/fsock.c parity)

1 participant