socket_create_listen
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_create_listen — 在端口上打开一个套接字以接受连接
说明
socket_create_listen() 创建一个 AF_INET
类型的 Socket
实例,在所有本地接口上监听指定端口,等待新连接。
此方法旨在简化创建新的套接字任务,仅监听且用于接受新连接。
参数
port
-
监听所有接口的端口号
backlog
-
backlog
参数定义了待处理的连接队列的最大长度。SOMAXCONN
可以作为backlog
参数,详情见 socket_listen()。
返回值
socket_create_listen() 成功时返回一个新的 Socket
实例,错误时返回 false
。可以通过调用 socket_last_error()
来检索实际的错误码。将错误码作为参数传递给 socket_strerror() 以获得错误的文本解释。
注释
注意:
如果想创建只监听某个接口的套接字,需要使用 socket_create(),socket_bind() 和 socket_listen()。
参见
- socket_create() - 创建一个套接字(通讯节点)
- socket_create_pair() - 创建一对彼此连接的套接字,并用数组存储
- socket_bind() - 给套接字绑定名字
- socket_listen() - 监听套接字的连接
- socket_last_error() - 返回套接字上的最后一个错误
- socket_strerror() - 返回描述套接字错误的字符串
+添加备注
用户贡献的备注 3 notes
jdittmer at ppp0 dot net ¶
20 years ago
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);
?>
sysspoof at ng-lab dot org ¶
16 years ago
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.
basim at baassiri dot com ¶
21 years ago
Remember that ports are only valid from 1 - 65535
[editor's note: typo fixed, thanks abryant at apple dot com]
备份地址:http://www.lvesu.com/blog/php/function.socket-create-listen.php