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() создаёт новый экземпляр 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().

Смотрите также

  • socket_create() - Создаёт сокет (конечную точку для обмена информацией)
  • socket_create_pair() - Создаёт пару неразличимых сокетов и сохраняет их в массиве
  • socket_bind() - Привязывает имя к сокету
  • socket_listen() - Прослушивает входящие соединения на сокете
  • socket_last_error() - Возвращает последнюю ошибку на сокете
  • socket_strerror() - Возвращает строку, описывающую ошибку сокета

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