The stream socket functions are incredibly useful and obviate the need for the sockets extension for the vast majority of potential use-cases. However, it's currently it's not possible bind a socket and listen for connections in separate steps using stream_socket_server().
This _can_ be done with the aid of ext/sockets like so: $stream = stream_socket_server('tcp://0.0.0.0:0', $errno, $errstr, STREAM_SERVER_BIND); $sock = socket_import_stream($stream); socket_listen($sock); Why is this useful? Well, for example, binding to a port in the main process and then listening individually in child forks/threads trivializes scaling socket servers. By listening on the same bound socket in multiple processes you get the advantage of the OS distributing new client connections to the individual workers instead of routing them in userland. Additionally, newer linux kernel versions (3.9x) now support the SO_REUSEPORT socket option which only makes this functionality more attractive. Admittedly you still need ext/sockets to reap the benefits of SO_REUSEPORT, but this may not always be the case. My proposed patch adds a very simple function so that listening may be decoupled from binding without the need for ext/sockets: $stream = stream_socket_server('tcp://0.0.0.0:0', $errNo, $errStr, STREAM_SERVER_BIND); // do stuff, fork, etc. Then in the child process: stream_socket_listen($server); Existing functionality is not modified and there are no BC breaks. I.E. you can still bind + listen in a single step like before: $stream = stream_socket_server('tcp://0.0.0.0:0', $errNo, $errStr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN); This addition seemed a bit trivial for an RFC, so and I didn't bother hitting the wiki. The link to the relevant pull request follows. Any thoughts, comments and opinions are welcome: https://github.com/php/php-src/pull/431