socket_get_option

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

socket_get_optionПолучает опции потока для сокета

Описание

socket_get_option(Socket$socket, int$level, int$option): array|int|false

Функция socket_get_option() извлекает значение для опции, указанной параметром option для заданного socket.

Список параметров

socket

Экземпляр Socket, созданный с помощью socket_create() или socket_accept().

level

Параметр level указывает уровень протокола, на котором находится опция. Например, для получения опций на уровне сокета, должен использовать параметр level, равный SOL_SOCKET. Другие уровни, такие как TCP, можно использовать, указав номер протокола этого уровня. Номера протоколов можно найти с помощью функции getprotobyname().

option
Доступные опции сокета
ОпцияОписаниеТип
SO_DEBUG Сообщает, записывается ли отладочная информация. int
SO_BROADCAST Сообщает, поддерживается ли передача широковещательных сообщений. int
SO_REUSEADDR Сообщает, могут ли локальные адреса использоваться повторно. int
SO_REUSEPORT Сообщает, могут ли локальные порты использоваться повторно. int
SO_KEEPALIVE Сообщает, поддерживаются ли соединения с периодической передачей сообщений. Если подключённый сокет не отвечает на эти сообщения, подключение прерывается и процессы записи в этот сокет уведомляются сигналом SIGPIPE. int
SO_LINGER

Сообщает, будет ли socket останавливаться на socket_close(), если данные присутствуют. По умолчанию, когда сокет закрыт, он попытается отправить все неотправленные данные. В случае сокета, ориентированного на подключение, socket_close() будет ожидать, пока его одноранговый узел подтвердит данные.

Если l_onoff отличен от нуля, а l_linger равно нулю, все неотправленные данные будут отброшены и RST (сброс) отправлен одноранговому узлу в случае сокета, ориентированного на подключение.

С другой стороны, если l_onoff и l_linger отличны от нуля, socket_close() будет блокироваться до тех пор, пока все данные не будут отправлены или если время, указанное в l_linger, не истечёт. Если сокет не блокируется, socket_close() потерпит неудачу и вернёт ошибку.

array. Массив будет содержать два ключа: l_onoff и l_linger.
SO_OOBINLINE Сообщает, выходит ли socket из встроенных данных. int
SO_SNDBUF Сообщает размер отправленного буфера. int
SO_RCVBUF Сообщает о размере полученного буфера. int
SO_ERROR Сообщает информацию о статусе ошибки и очищает её. int (не может быть установлен socket_set_option())
SO_TYPE Сообщает о типе socket (например, SOCK_STREAM). int (не может быть установлен socket_set_option())
SO_DONTROUTE Сообщает, что исходящие сообщения обходят стандартные средства маршрутизации. int
SO_RCVLOWAT Сообщает минимальное количество байтов для обработки операций ввода socket. int
SO_RCVTIMEO Сообщает значение времени ожидания для операций ввода. array. Массив будет содержать два ключа: sec, который является частью секунд для значения времени ожидания и usec, который является микросекундной частью значения времени ожидания.
SO_SNDTIMEO Сообщает значение времени ожидания, указывающее количество времени, которое блокирует функция вывода, поскольку управление потоком предотвращает отправку данных. array. Массив будет содержать два ключа: sec, который является частью секунд для значения времени ожидания и usec, который является микросекундной частью значения времени ожидания.
SO_SNDLOWAT Сообщает минимальное количество байтов для обработки операцией вывода socket. int
TCP_NODELAY Сообщает, отключён ли алгоритм Nagle TCP. int
MCAST_JOIN_GROUP Присоединяется к многоадресной группе. массив (array) с ключами "group", указав строку (string) с многоадресным адресом IPv4 или IPv6 и "interface", указав либо номер интерфейса (тип int), либо строку (string) с именем интерфейса, например "eth0". 0 можно указать, чтобы сообщить, что интерфейс должен быть выбран с использованием правил маршрутизации. (может использоваться только в socket_set_option())
MCAST_LEAVE_GROUP Оставляет многоадресную группу. массив (array). Смотрите MCAST_JOIN_GROUP для получения дополнительной информации. (может использоваться только в socket_set_option())
MCAST_BLOCK_SOURCE Блокирует пакеты, поступающие из определённого источника в определённую группу многоадресной передачи, которые должны быть предварительно соединены. массив (array) с такими же ключами, как у MCAST_JOIN_GROUP, плюс один дополнительный ключ, source, который представляет строку (string), указывающую адрес IPv4 или IPv6 источника, который должен быть заблокирован. (может использоваться только в socket_set_option())
MCAST_UNBLOCK_SOURCE Разблокирует (начинает приём снова) пакеты, поступающие с определённого исходного адреса в определённую группу многоадресной передачи, которая должна предварительно соединена. массив (array) с таким же форматом, как у MCAST_BLOCK_SOURCE. (может использоваться только в socket_set_option())
MCAST_JOIN_SOURCE_GROUP Получать пакеты, предназначенные для конкретной группы многоадресной передачи, исходный адрес которого совпадает определённому значению. массив (array) с тем же самым форматом, что у MCAST_BLOCK_SOURCE. (может использоваться только в socket_set_option())
MCAST_LEAVE_SOURCE_GROUP Остановить приём пакетов, предназначенных для конкретной группы многоадресной передачи, исходный адрес которого совпадает определённому значению. массив (array) с тем же самым форматом, что у MCAST_BLOCK_SOURCE. (может использоваться только в socket_set_option())
IP_MULTICAST_IF Исходящий интерфейс для многоадресных пакетов IPv4. Любое целое число (int), указывающее номер интерфейса или строку (string) с именем интерфейса, например, eth0. Значение 0 может использоваться для указания, что таблица маршрутизации используется для выбора интерфейса. Функция socket_get_option() возвращает индекс интерфейса. Обратите внимание, что в отличие от C API, эта опция НЕ принимает IP-адрес. Это устраняет разницу в интерфейсе между IP_MULTICAST_IF и IPV6_MULTICAST_IF.
IPV6_MULTICAST_IF Исходящий интерфейс для многоадресных пакетов IPv6. То же, что и IP_MULTICAST_IF.
IP_MULTICAST_LOOP Политика петли групповой передачи для пакетов IPv4 включает или отключает передачу исходящих многоадресных рассылок, которые должны быть предварительно присоединены. Эффект, однако, различается, в зависимости от применения в Unix или Windows: в первом случае на пути получения, а во втором - на пути отправки. целое число (int) (либо 0, либо 1). Для socket_set_option() любое значение будет принято и преобразовано в тип boolean, согласно обычным правилам PHP.
IPV6_MULTICAST_LOOP Аналогично IP_MULTICAST_LOOP, но для IPv6. int. See IP_MULTICAST_LOOP.
IP_MULTICAST_TTL Время ожидания исходящих пакетов IPv4 для многоадресной передачи. Это должно быть значение между 0 (не оставлять интерфейс) и 255. Значение по умолчанию - 1 (достигается только локальная сеть). целое число (int) между 0 и 255.
IPV6_MULTICAST_HOPS Аналогично IP_MULTICAST_TTL, но для пакетов IPv6. Значение -1 также принимается, что означает использование маршрута по умолчанию. целое число (int) между 0 и 255.
SO_MARK Устанавливает идентификатор сокета для фильтрации пакетов в Linux. int
SO_ACCEPTFILTER Добавляет фильтр приёма на прослушиваемый сокет (FreeBSD/NetBSD). Модуль ядра фильтра приёма должен быть предварительно загружен в FreeBSD (например, accf_http). Строка (string) имя фильтра (длина не более 15).
SO_USER_COOKIE Устанавливает идентификатор сокета для фильтрации пакетов в FreeBSD. int
SO_RTABLE Устанавливает идентификатор сокета для фильтрации пакетов в OpenBSD. int
SO_DONTTRUNC Сохраняет непрочитанные данные. int
SO_WANTMORE Подсказывает, когда будет доступно больше данных. int
TCP_DEFER_ACCEPT Не уведомляет слушающий сокет, пока данные не будут готовы. int
SO_INCOMING_CPU Получает/устанавливает сродство к процессору для сокета. int
SO_MEMINFO Получает meminfo сокета. int
SO_BPF_EXTENSIONS Получает поддерживаемые ядром модули BPF для присоединения к сокету. int
SO_SETFIB Устанавливает таблицу маршрутизации (FIB) сокета (только FreeBSD). int
SOL_FILTER Фильтры, приписываемые сокету (только для Solaris/Illumos). int
TCP_KEEPCNT Устанавливает максимальное количество зондов keepalive, которые TCP должен отправить перед разрывом соединения. int
TCP_KEEPIDLE Устанавливает время, в течение которого соединение должно простаивать. int
TCP_KEEPINTVL Устанавливает время между отдельными зондами keepalive. int
TCP_KEEPALIVE Устанавливает время, в течение которого соединение должно простаивать (только для macOS). int
TCP_NOTSENT_LOWAT Устанавливает предельное количество неотправленных данных в очереди на запись потоком сокета (только для Linux). int

Возвращаемые значения

Возвращает значение заданной опции или false, если возникла ошибка.

Список изменений

ВерсияОписание
8.0.0socket теперь экземпляр класса Socket; ранее был ресурсом (resource).

Примеры

Пример #1 Пример использования socket_get_option()

<?php
$socket
= socket_create_listen(1223);

$linger = array('l_linger' => 1, 'l_onoff' => 1);
socket_set_option($socket, SOL_SOCKET, SO_LINGER, $linger);

var_dump(socket_get_option($socket, SOL_SOCKET, SO_REUSEADDR));
?>

Смотрите также

  • socket_create_listen() - Открывает сокет на указанном порту для принятия соединений
  • socket_set_option() - Устанавливает опции для сокета
To Top