socket_create_listen

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_create_listen在端口上打开套接字以接受连接

说明

socket_create_listen(int $port, int $backlog = SOMAXCONN): Socket|false

socket_create_listen() 创建一个新的 Socket 实例,类型为 AF_INET,在给定端口上的所有本地接口上监听,等待新的连接。

此函数旨在简化创建仅监听以接受新连接的套接字的任务。

参数

port

要监听的所有接口上的端口。

backlog

backlog 参数定义了待处理连接队列可能增长到的最大长度。可以将 SOMAXCONN 作为 backlog 参数传递,有关更多信息,请参见 socket_listen()

返回值

socket_create_listen() 在成功时返回一个新的 Socket 实例,或在错误时返回 false。可以使用 socket_last_error() 获取错误代码。此代码可以传递给 socket_strerror() 以获取错误的文本解释。

变更日志

版本 说明
8.0.0 成功时,此函数现在返回一个 Socket 实例;以前,返回的是 resource

备注

注意:

如果您想创建一个仅在特定接口上监听的套接字,您需要使用 socket_create()socket_bind()socket_listen()

参见

添加注释

用户贡献的注释 4 个注释

10
jdittmer at ppp0 dot net
20 年前
如果您没有指定端口号或为 0,则会选择一个随机的空闲端口。
要在同一台机器上的客户端/服务器之间使用端口进行 ipc,您可以使用(减去错误检查)

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);
?>
4
sysspoof at ng-lab dot org
16 年前
请注意,在 linux 和 bsd 系统上,端口 1 到 1024 需要 root 权限。因此建议为您的应用程序选择更高的端口。
2
basim at baassiri dot com
20 年前
请记住,端口仅在 1 到 65535 之间有效

[编辑注意:拼写错误已修复,感谢 abryant at apple dot com]
-15
aeolianmeson at ifacfchi dot blitzeclipse dot com
16 年前
我认为在某些系统上这可能不会绑定到某些或所有公共接口。

在我的 Windows 系统上,我无法使用此方法连接到公共接口,但当我对创建、绑定和监听进行单独调用时可以。

Dustin Oprea
To Top