(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_create_listen — Opens a socket on port to accept connections
socket_create_listen() creates a new Socket instance of
type AF_INET
listening on all
local interfaces on the given port waiting for new connections.
This function is meant to ease the task of creating a new socket which only listens to accept new connections.
port
The port on which to listen on all interfaces.
backlog
The backlog
parameter defines the maximum length
the queue of pending connections may grow to.
SOMAXCONN
may be passed as
backlog
parameter, see
socket_listen() for more information.
socket_create_listen() returns a new Socket instance
on success or false
on error. The error code can be retrieved with
socket_last_error() . This code may be passed to
socket_strerror() to get a textual explanation of the
error.
Version | Description |
---|---|
8.4.0 |
The default value of is now SOMAXCONN .
Previously it was 128 .
|
8.0.0 | On success, this function returns a Socket instance now; previously, a resource was returned. |
Note:
If you want to create a socket which only listens on a certain interface you need to use socket_create() , socket_bind() and socket_listen() .
If you specify no port number, or 0, a random free port will be chosen.
To use ports for ipc between client/server on the same machine you can use (minus error checking)
server.php:
<?php
$sock = socket_create_listen(0);
socket_getsockname($sock, $addr, $port);
print "Server Listening on $addr:$port\n";
$fp = fopen($port_file, 'w');
fwrite($fp, $port);
fclose($fp);
while($c = socket_accept($sock)) {
/* do something useful */
socket_getpeername($c, $raddr, $rport);
print "Received Connection from $raddr:$rport\n";
}
socket_close($sock);
?>
client.php:
<?php
$fp = fopen($port_file, 'r');
$port = fgets($fp, 1024);
fclose($fp);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock, '127.0.0.1', $port);
socket_close($sock);
?>
Please note that port 1 to and with 1024 on linux and bsd system require root privileges. So it is recommended to choose a higher port for your own application.
Remember that ports are only valid from 1 - 65535
[editor's note: typo fixed, thanks abryant at apple dot com]