socket_recvfrom
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_recvfrom — Получает данные из сокета, независимо от того, подсоединён он или нет
Описание
Параметры address и port должны быть
переданы по ссылке. Если сокет не ориентирован на соединение,
address должен быть установлен как адрес интернет-протокола удалённого
хоста, либо как путь к сокету UNIX. Если сокет не ориентирован на соединение,
address должен быть null. Дополнительно,
port должен содержать порт удалённого хоста для не
подключённых сокетов типа AF_INET и
AF_INET6.
Замечание:
Функция безопасна для обработки данных в двоичной форме.
Список параметров
socket
-
Параметр socket должен быть экземпляром Socket,
предварительно созданным при помощи функции socket_create().
data
-
Полученные данные будут переданы в переменную, указанную при помощи параметра
data.
length
-
С удалённого хоста будет получено до length байт.
flags
-
Значение параметра flags может быть любой комбинацией
следующих флагов, объединённых при помощи двоичного оператора OR (|)
operator.
Возможные значения для параметра flags
| Флаг |
Описание |
MSG_OOB |
Обрабатывать внеполосные (out-of-band) данные.
|
MSG_PEEK |
Получать данные из начала очереди, не удаляя их.
|
MSG_WAITALL |
Блокировать выполнение скрипта до тех пор, пока как минимум length
не будет получено.
Однако, если будет получен сигнал или удалённый хост отсоединится, функция
может возвратить меньше данных.
|
MSG_DONTWAIT |
Если этот флаг установлен, функция возвратится даже если обычно она будет
блокировать выполнение скрипта.
|
address
-
Если сокет типа AF_UNIX,
address - это путь к файлу. В ином случае, для
неподсоединённых сокетов, параметр address - это IP-адрес,
удалённого хоста, или null, если сокет ориентирован по соединение.
port
-
Этот аргумент применим только к сокетам AF_INET и
AF_INET6, и указывает удалённый порт,
из которого будут получены данные. Если сокет ориентирован по соединение,
port будет null.
Возвращаемые значения
socket_recvfrom() возвращает количество полученных байт
или false, если произошла ошибка. Фактический код ошибки может быть получен при помощи
вызова функции socket_last_error(). Этот код ошибки может быть
передан функции socket_strerror() для получения текстового описания
ошибки.
Примеры
Пример #1 Пример использования socket_recvfrom()
<?php
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($socket, '127.0.0.1', 1223);
$from = '';
$port = 0;
socket_recvfrom($socket, $buf, 12, 0, $from, $port);
echo "Получено $buf с удалённого адреса $from и удалённого порта $port" . PHP_EOL;
?>
Этот пример откроет UDP-сокет на порту 1223 по адресу 127.0.0.1
и выведет максимум 12 символов, полученных с удалённого хоста.