Функции для работы с потоками
PHP Manual

stream_socket_server

(PHP 5)

stream_socket_serverСоздаёт интернет-сокет или доменный сокет Unix

Описание

resource stream_socket_server ( string $local_socket [, int &$errno [, string &$errstr [, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN [, resource $context ]]]] )

Создаёт потоковый или датаграммный сокет на указанном local_socket.

Эта функция только создаёт сокет. Чтобы начать принимать соединения используйте stream_socket_accept().

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

local_socket

Тип создаваемого сокета определяется по транспорту, указанному с использованием стандартного форматирования URL: transport://target.

Для доменных сокетов интернета (AF_INET), таких, как TCP и UDP, часть target параметра remote_socket должна состоять из имени хоста или IP-адреса с последующием двоеточием и номера порта. Для доменных сокетов Unix часть target должна указывать на файл сокета в файловой системе.

В зависимости от окружения, доменные сокеты Unix могут быть недоступны. Список доступных транспортов может быть получен при помощи функции stream_get_transports(). Смотрите Список поддерживаемых транспортных протоколов для списка встроенных транспортов.

errno

Если необязательные аргументы errno и errstr присутствуют, то они будут установлены для указания действительного уровня системной ошибки, которая происходит при системных вызовах socket(), bind() и listen(). Если значение, возвращаемое в errno, равно 0 и функция возвратила FALSE, это означает, что ошибка произошла до вызова bind(). Скорее всего это произошло из-за проблемы инициализации сокета. Примите во внимание, что аргументы errno и errstr должны всегда передаваться по ссылке.

errstr

Смотрите описание параметра errno.

flags

Битовая маска, которая может быть установлена в любую комбинацию флагов для создания сокета.

Замечание:

Для UDP-сокетов вы должны использовать STREAM_SERVER_BIND в качестве параметра flags.

context

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

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

Примеры

Пример #1 Пример использования серверных сокетов TCP

<?php
$socket 
stream_socket_server("tcp://0.0.0.0:8000"$errno$errstr);
if (!
$socket) {
  echo 
"$errstr ($errno)<br />\n";
} else {
  while (
$conn stream_socket_accept($socket)) {
    
fwrite($conn'Локальное время ' date('n/j/Y g:i a') . "\n");
    
fclose($conn);
  }
  
fclose($socket);
}
?>

Пример ниже показывает, как работать в качестве сервера времени, который может отвечать на запросы времени, как показано в примере функции stream_socket_client().

Замечание: Большинство систем требуют доступа с правами root для создания серверного сокета на порту ниже, чем 1024.

Пример #2 Пример использования серверных сокетов UDP

<?php
$socket 
stream_socket_server("udp://127.0.0.1:1113"$errno$errstrSTREAM_SERVER_BIND);
if (!
$socket) {
    die(
"$errstr ($errno)");
}

do {
    
$pkt stream_socket_recvfrom($socket10$peer);
    echo 
"$peer\n";
    
stream_socket_sendto($socketdate("D M j H:i:s Y\r\n"), 0$peer);
} while (
$pkt !== false);

?>

Примечания

Замечание: При указании числового адреса IPv6 (например, fe80::1) вы должны заключать его в квадратные скобки. Например, tcp://[fe80::1]:80.

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


Функции для работы с потоками
PHP Manual