略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: socket_create_listen

2024-05-02

socket_create_listen

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

socket_create_listenOpens a socket on port to accept connections

说明

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

socket_create_listen() creates a new Socket instance 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 instance 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.

更新日志

版本 说明
8.0.0 On success, this function returns a Socket instance now; previously, a resource was returned.

注释

注意:

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

参见

add a noteadd a note

User Contributed Notes 4 notes

up
8
jdittmer at ppp0 dot net
17 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
14 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
18 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
13 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

官方地址:https://www.php.net/manual/en/function.socket-create-listen.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3