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 = ?
) : resource
Создаёт сокет потока или датаграммы на указанном
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