socket_create_listen

(PHP 4 >= 4.1.0, PHP 5)

socket_create_listen -- Opens a socket on port to accept connections

Description

resource socket_create_listen ( int port [, int backlog] )

This function is meant to ease the task of creating a new socket which only listens to accept new connections.

socket_create_listen() creates a new socket resource of type AF_INET listening on all local interfaces on the given port waiting for new connections.

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 resource 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.

注: 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().

See also socket_create(), socket_bind(), socket_listen(), socket_last_error() and socket_strerror().


add a note add a note User Contributed Notes
alex at do not spam me cedevices.com
08-Aug-2005 01:48
Just a quick note on this function - it is not working properly in PHP 5.0.4 in that it does not listen on all interfaces (only listens on localhost).

I have filed Bug #34028 socket_create_listen doesn't listen on all interfaces

I am only posting this here because I had trouble figuring out that it was an issue and somebody might be having trouble too!
vslash
17-Feb-2005 03:34
Just correct one error about note below :
We read :
----
while($c = socket_accept($sock)) {
   /* do something useful */
  socket_getpeername($sock, $raddr, $rport);
  print "Received Connection from $raddr:$rport\n";
}
----
but it must be :
  socket_getpeername($c,$raddr,$rport);

;)
jdittmer at ppp0 dot net
17-Jul-2004 07:42
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($sock, $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);
?>
basim at baassiri dot com
07-Feb-2004 06:50
Remember that ports are only valid from 1 - 65536