socket_recvfrom
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
socket_recvfrom — Получает данные из сокета, независимо от того, подсоединён он или нет
Описание
$socket
, string &$buf
, int $len
, int $flags
, string &$name
, int &$port
= ?
) : int
Функция socket_recvfrom() получает len
байт
данных в buf
из адреса name
на порту
port
(если сокет не типа AF_UNIX
)
используя сокет socket
. Функция
socket_recvfrom() может быть использована для извлечения данных
как из подключенных, так и из не подключенных сокетов. Дополнительно, один или более флагов
могут быть указаны для того, чтобы изменить поведение функции.
Параметры name
и port
должны быть
переданы по ссылке. Если сокет не ориентирован на соединение,
name
должен быть установлен как адрес интернет-протокола удаленного
хоста, либо как путь к сокету UNIX. Если сокет не ориентирован на соединение,
name
должен быть null
. Дополнительно,
port
должен содержать порт удаленного хоста для не
подключенных сокетов типа AF_INET
и
AF_INET6
.
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Список параметров
-
socket
-
Параметр
socket
должен быть ресурсом сокета, предварительно созданным при помощи функции socket_create(). -
buf
-
Полученные данные будут переданы в переменную, указанную при помощи параметра
buf
. -
len
-
С удалённого хоста будет получено до
len
байт. -
flags
-
Значение параметра
flags
может быть любой комбинацией следующих флагов, объединённых при помощи двоичного оператора OR (|
) operator.Возможные значения для параметра flags
Флаг Описание MSG_OOB
Обрабатывать внеполосные (out-of-band) данные. MSG_PEEK
Получать данные из начала очереди, не удаляя их. MSG_WAITALL
Блокировать выполнение скрипта до тех пор, пока как минимум len
не будет получено. Однако, если будет получен сигнал или удалённый хост отсоединится, функция может возвратить меньше данных.MSG_DONTWAIT
Если этот флаг установлен, функция возвратится даже если обычно она будет блокировать выполнение скрипта. -
name
-
Если сокет типа
AF_UNIX
,name
- это путь к файлу. В ином случае, для неподсоединённых сокетов, параметрname
- это IP-адрес, удалённого хоста, илиnull
, если сокет ориентирован по соединение. -
port
-
Этот аргумент применим только к сокетам
AF_INET
иAF_INET6
, и указывает удалённый порт, из которого будут получены данные. Если сокет ориентирован по соединение,port
будетnull
.
Возвращаемые значения
socket_recvfrom() возвращает количество полученных байт
или false
, если произошла ошибка. Фактический код ошибки может быть получен при помощи
вызова функции socket_last_error(). Этот код ошибки может быть
передан функции socket_strerror() для получения текстового описания
ошибки.
Примеры
Пример #1 Пример использования socket_recvfrom()
<?php
error_reporting(E_ALL | E_STRICT);
$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 символов, полученных с удалённого хоста.
Смотрите также
- socket_recv() - Получает данные из подсоединённого сокета
- socket_send() - Отправляет данные в подсоединённый сокет
- socket_sendto() - Отправляет сообщение в сокет, независимо от того, подсоединён он или нет
- socket_create() - Создаёт сокет (конечную точку для обмена информацией)