resource socket_create(integer family, integer socket_type, integer protocol)
Функция socket_create инициализирует оболочку, в пределах которой потом работают остальные функции, предназначенные для работы с сокетами. Первым аргументом является семейство протокола или домен. Для соединений, осуществляемых через Internet, этому аргументу задается значение AF_INET, а для соединений через сокеты Unix задается значение AF_Unix. Второй аргумент представляет собой тип сокета. Типы сокетов перечислены в табл. 10.4. Обычно в сценариях используются SOCK_STREAM для TCP и SOCK_DGRAM для UDP. Третий аргумент задает протокол. Для TPC и UDP используются SOL_TCP или SOL_UDP соответственно. Можно использовать функцию getprotobyname.
Операции ввода-вывода на сетевом уровне
resource socket_create_listen(integer port, integer backlog)
Функция socket_create_listen используется как упрощенная альтернатива функции socket_create, если необходимо создать сокет для прослушивания. Созданный сокет будет прослушивать все имеющиеся интерфейсы заданного порта. Необязательный аргумент backlog задает максимальный размер очереди соединений.
boolean socket_create_pair(integer family, integer socket_type, integer protocol, array handles)
Функция socket_create_pair (листинг 10.12) создает пару подключенных соке-тов. Первые три аргумента полностью соответствуют аргументам функции socket_create. Аргумент handles настроен на массив с данными по двум ресурсам сокетов. Работа этой функции базируется на C-функцим socketpair.
Операции ввода-вывода на сетевом уровне
value socket_get_option(resource socket, integer level, integer option)
Функция socket_get_option (листинг 10.13) возвращает значение одного из пара­метров, приведенных в табл. 10.5. При этом необходимо задавать значение дескриптора сокета, созданного функцией socket_create, и уровень (параметр level). Для по­лучения значений на уровне сокета для аргумента level задается значение SOL_SOCKET, иначе для использования TCP-протокола указывается значение SOL_TCP. Эти значения можно установить с помощью функции socket_set_option.

Листинг 10.13. Функция socket_get_options

<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); print('SO_BROADCAST: ' .
socket_get_option($socket, SOL_SOCKET, SO_BROADCAST) . "<br>n");
print('SO_DEBUG: ' .
socket_get_option($socket, SOL_SOCKET, SO_DEBUG) . "<br>n");
print('SO_DONTROUTE: ' .
socket_get_option($socket, SOL_SOCKET, SO_DONTROUTE) . "<br>n");
print('SO_ERROR: ' .
socket_get_option($socket, SOL_SOCKET, SO_ERROR) . "<br>n");
print('SO_KEEPALIVE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_KEEPALIVE) . "<br>n"); print('SO_LINGER: ' .
print_r(socket_get_option($socket, SOL_SOCKET, SO_LINGER), TRUE) . "<br>n");
print('SO_OOBINLINE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_OOBINLINE) . "<br>n"); print('SO_RCVBUF: ' .
socket_get_option($socket, SOL_SOCKET,
SO_RCVBUF) . "<br>n");
print('SO_RCVLOWAT: ' .
socket_get_option($socket, SOL_SOCKET, SO_RCVLOWAT) . "<br>n");
print('SO_RCVTIMEO: ' .
print_r(socket_get_option($socket, SOL_SOCKET, SO_RCVTIMEO), TRUE) . "<br>n");
print('SO_REUSEADDR: ' .
socket_get_option($socket, SOL_SOCKET,
SO_REUSEADDR) . "<br>n"); print('SO_SNDBUF: ' .
socket_get_option($socket, SOL_SOCKET,
SO_SNDBUF) . "<br>n");
print('SO_SNDLOWAT: ' .
socket_get_option($socket, SOL_SOCKET, SO_SNDLOWAT) . "<br>n");
print('SO_SNDTIMEO: ' .
print_r(socket_get_option($socket, SOL_SOCKET, 
SO_SNDTIMEO), TRUE) . "<br>n");
print('SO_TYPE: ' .
socket_get_option($socket, SOL_SOCKET, SO_TYPE) . "<br>n");
?>