stream_socket_server - Создаёт интернет-сокет или доменный сокет Unix
Вернуться к: Функции для работы с потоками
stream_socket_server
(PHP 5, PHP 7)
stream_socket_server — Создаёт интернет-сокет или доменный сокет Unix
Описание
$local_socket
[, int &$errno
[, string &$errstr
[, int $flags
= STREAM_SERVER_BIND | STREAM_SERVER_LISTEN
[, resource $context
]]]] )
Создаёт потоковый или датаграммный сокет на указанном
local_socket
.
Эта функция только создаёт сокет. Чтобы начать принимать соединения используйте stream_socket_accept().
Список параметров
-
local_socket
-
Тип создаваемого сокета определяется по транспорту, указанному с использованием стандартного форматирования URL: transport://target.
Для доменных сокетов интернета (
AF_INET
), таких, как TCP и UDP, часть target параметраremote_socket
должна состоять из имени хоста или IP-адреса с последующим двоеточием и номера порта. Для доменных сокетов Unix часть target должна указывать на файл сокета в файловой системе.В зависимости от окружения, доменные сокеты Unix могут быть недоступны. Список доступных транспортов может быть получен при помощи функции stream_get_transports(). Смотрите Список поддерживаемых транспортных протоколов для списка встроенных транспортов.
-
errno
-
Если необязательные аргументы
errno
иerrstr
присутствуют, то они будут установлены для указания действительного уровня системной ошибки, которая происходит при системных вызовах socket(), bind() и listen(). Если значение, возвращаемое вerrno
, равно 0 и функция возвратилаFALSE
, это означает, что ошибка произошла до вызова bind(). Скорее всего это произошло из-за проблемы инициализации сокета. Примите во внимание, что аргументыerrno
иerrstr
должны всегда передаваться по ссылке. -
errstr
-
Смотрите описание параметра
errno
. -
flags
-
Битовая маска, которая может быть установлена в любую комбинацию флагов для создания сокета.
Замечание:
Для UDP-сокетов вы должны использовать
STREAM_SERVER_BIND
в качестве параметраflags
. -
context
-
Возвращаемые значения
Возвращает созданный поток, или FALSE
в случае ошибки.
Примеры
Пример #1 Пример использования серверных сокетов TCP
<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, 'Локальное время ' . date('n/j/Y g:i a') . "\n");
fclose($conn);
}
fclose($socket);
}
?>
Пример ниже показывает, как работать в качестве сервера времени, который может отвечать на запросы времени, как показано в примере функции stream_socket_client().
Замечание: Большинство систем требуют доступа с правами root для создания серверного сокета на порту ниже, чем 1024.
Пример #2 Пример использования серверных сокетов UDP
<?php
$socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
die("$errstr ($errno)");
}
do {
$pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
echo "$peer\n";
stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
} while ($pkt !== false);
?>
Примечания
Замечание: При указании числового адреса IPv6 (например, fe80::1) вы должны заключать его в квадратные скобки. Например, tcp://[fe80::1]:80.
Смотрите также
- stream_socket_client() - Открывает соединение с интернет-сокетом или с доменным сокетом Unix
- stream_set_blocking() - Устанавливает блокирующий/неблокирующий режим на потоке
- stream_set_timeout() - Устанавливает значение тайм-аута на потоке
- fgets() - Читает строку из файла
- fgetss() - Прочитать строку из файла и отбросить HTML-теги
- fwrite() - Бинарно-безопасная запись в файл
- fclose() - Закрывает открытый дескриптор файла
- feof() - Проверяет, достигнут ли конец файла
- Расширение curl
Вернуться к: Функции для работы с потоками