PHP Conference Nagoya 2025

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.4.0 Значение по умолчанию теперь равно значению константы SOMAXCONN. Раньше значение равнялось 128.
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() - Возвращает строку, описывающую ошибку сокета

Добавить

Примечания пользователей 3 notes

up
10
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);
?>
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]
To Top