(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_recvfrom — Получает данные из сокета, независимо от того, подсоединён он или нет
$socket
,&$data
,$length
,$flags
,&$address
,&$port
= null
Функция socket_recvfrom() получает length
байт данных в data
из адреса address
на порту port
(если сокет не типа AF_UNIX
) используя сокет socket
. Функция 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.
Флаг | Описание |
---|---|
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() для получения текстового описания ошибки.
Версия | Описание |
---|---|
8.0.0 | socket теперь экземпляр класса Socket; ранее был ресурсом (resource). |
Пример #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 символов, полученных с удалённого хоста.