©
本文档使用
php.cn手册 发布
(PHP 4 >= 4.1.0, PHP 5)
socket_create_listen — Opens a socket on port to accept connections
$port
[, int $backlog
= 128
] ) 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.
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 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.
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() .
[#1] aeolianmeson at ifacfchi dot blitzeclipse dot com [2008-06-26 15:34:33]
I believe that on some systems this may not bind to some or all public interfaces.
On my Windows system, I could not connect on the public interface using this, but could when I made the individual calls to create, bind, and listen.
Dustin Oprea
[#2] sysspoof at ng-lab dot org [2008-03-06 11:03:09]
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.
[#3] jdittmer at ppp0 dot net [2004-07-17 04:42:23]
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)) {
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);
?>
[#4] basim at baassiri dot com [2004-02-06 14:50:21]
Remember that ports are only valid from 1 - 65536