CakeFest 2024: The Official CakePHP Conference

socket_create_listen

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

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

说明

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

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

此方法旨在简化创建新的套接字任务,仅监听且用于接受新连接。

参数

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()

参见

add a note

User Contributed Notes 4 notes

up
10
jdittmer at ppp0 dot net
19 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);
?>
up
4
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.
up
2
basim at baassiri dot com
20 years ago
Remember that ports are only valid from 1 - 65535

[editor's note: typo fixed, thanks abryant at apple dot com]
up
-15
aeolianmeson at ifacfchi dot blitzeclipse dot com
15 years ago
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
To Top