PHP 7.4.0 alpha 1 Released

socket_get_option

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

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

Описание

socket_get_option ( resource $socket , int $level , int $optname ) : mixed

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

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

socket

Действительный ресурс сокета, созданный с помощью socket_create() или socket_accept().

level

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

optname
Доступные опции сокета
Опция Описание Тип
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 Присоединяется к многоадресной группе. (добавлено в PHP 5.4) массив (array) с ключами "group", указав строку (string) с многоадресным адресом IPv4 или IPv6 и "interface", указав либо номер интерфейса (тип int), либо строку (string) с именем интерфейса, например "eth0". 0 можно указать, чтобы сообщить, что интерфейс должен быть выбран с использованием правил маршрутизации. (может использоваться только в socket_set_option())
MCAST_LEAVE_GROUP Оставляет многоадресную группу. (добавлено в PHP 5.4) массив (array). См. MCAST_JOIN_GROUP для получения дополнительной информации. (может использоваться только в socket_set_option())
MCAST_BLOCK_SOURCE Блокирует пакеты, поступающие из определенного источника в определенную группу многоадресной передачи, которые должны быть предварительно соединены. (добавлено в PHP 5.4) array с такими же ключами, как у MCAST_JOIN_GROUP, плюс один дополнительный ключ, source, которыет представляет строку (string), указывающую адрес IPv4 или IPv6 источника, который должен быть заблокирован. (может использоваться только в socket_set_option())
MCAST_UNBLOCK_SOURCE Разблокирует (начинает прием снова) пакеты, поступающие с определенного исходного адреса в определенную группу многоадресной передачи, которая должна предварительно соединена. (добавлено в PHP 5.4) массив (array) с таким же форматом, как у MCAST_BLOCK_SOURCE. (может использоваться только в socket_set_option())
MCAST_JOIN_SOURCE_GROUP Получать пакеты, предназначенные для конкретной группы многоадресной передачи, исходный адрес которого совпадает определенному значению. (добавлено в PHP 5.4) массив (array) с тем же самым форматом, что у MCAST_BLOCK_SOURCE. (может использоваться только в socket_set_option())
MCAST_LEAVE_SOURCE_GROUP Остановить прием пакетов, предназначенных для конкретной группы многоадресной передачи, исходный адрес которого совпадает определенному значению. (добавлено в PHP 5.4) array with the same format as MCAST_BLOCK_SOURCE. (can only be used in socket_set_option())
IP_MULTICAST_IF Исходящий интерфейс для многоадресных пакетов IPv4. (добавлено в PHP 5.4) Любое целое число (int), указывающее номер интерфейса строку (string) с именем интерфейса, например eth0. Значение 0 может использоваться для указания, что таблица маршрутизаци используется для выбора интерфейса. Функция socket_get_option() возвращает индекс интерфейса. Обратите внимание, что в отличие от C API, эта опция НЕ принимает IP-адрес. Это устраняет разницу в интерфейсе между IP_MULTICAST_IF и IPV6_MULTICAST_IF.
IPV6_MULTICAST_IF Исходящий интерфейс для многоадресных пакетов IPv6. (добавлено в PHP 5.4) То же, что и IP_MULTICAST_IF.
IP_MULTICAST_LOOP Политика петли групповой передачи для пакетов IPv4, которая определяет, могут ли пакеты многоадресной передачи, отправленные этим сокетом, также достигать приемники на том же хосте, которые присоединились к той же группе многоадресной передачи на исходящем интерфейсе, который используется этим сокетом. Это в данном случае по умолчанию. (добавлено в PHP 5.4) целое число (int) (либо 0 или 1). Для socket_set_option() любое значение будет принято и преобразовано в тип boolean, согласно обычным правилам PHP.
IPV6_MULTICAST_LOOP Аналогично IP_MULTICAST_LOOP, но для IPv6. (добавлено в PHP 5.4) int. See IP_MULTICAST_LOOP.
IP_MULTICAST_TTL Время ожидания исходящих пакетов IPv4 для многоадресной передачи. Это должно быть значение между 0 (не оставлять интерфейс) и 255. Значение по умолчанию - 1 (достигается только локальная сеть). (добавлено в PHP 5.4) целое число (int) между 0 и 255.
IPV6_MULTICAST_HOPS Аналогично IP_MULTICAST_TTL, но для пакетов IPv6. Значение -1 также принимается, что означает использование маршрута по умолчанию. (добавлено в PHP 5.4) целое число (int) между 0 и 255.

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

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

Примеры

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

<?php
$socket 
socket_create_listen(1223);

$linger = array('l_linger' => 1'l_onoff' => 1);
socket_set_option($socketSOL_SOCKETSO_LINGER$linger);

var_dump(socket_get_option($socketSOL_SOCKETSO_REUSEADDR));
?>

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

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

add a note add a note

User Contributed Notes 3 notes

up
3
recycling dot sp dot am at gmail dot com
8 years ago
Just 2 notes here:
- On UNIX, If SO_DEBUG is set, the php program needs an effective user id of 0.
-  activating SO_OOBINLINE on a socket is equivalent to passing MSG_OOB flag to each recieving functions used with that socket (eg: socket_recv, socket_recvfrom).
up
2
Chad Lavoie
8 years ago
If using Unix Sockets, and you want to use SO_PEERCRED, you can use the number 17 for the optname (and SOL_SOCKET for the level).  The PID of the connecting process will be returned.
up
1
prennings at gmail dot com
5 years ago
I was playing around with this option to use multiply socket connections with same hostname and same port (IRC). However the socket function needed for this is SO_REUSEPORT.

Though the majority of linux distro's does not have that yet officially implented in there distro's.

However for debian there is an patch that can be installed to get it working:

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c617f398edd4db2b8567a28e899a88f8f574798d

it has some work but I got it working after a while (Noobie in debian) maybe some other people are facing the same problem as I was.
To Top