PHP 8.6.0 Beta 1 is available for testing

socket_create_pair

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

socket_create_pairСоздаёт пару неразличимых сокетов и сохраняет их в массиве

Описание

function socket_create_pair(
int $domain,
int $type,
int $protocol,
array &$pair
): bool

socket_create_pair() создаёт два соединённых и неразличимых сокета, и сохраняет их в массиве pair. Эта функция обычно используется IPC (межпроцессном взаимодействии).

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

domain

Параметр domain определяет семейство протоколов, которое будет использоваться сокетом. Смотрите их полный список в описании функции socket_create() .

type

Параметр type указывает тип коммуникации, которая будет использоваться сокетом. Смотрите их полный список в описании функции socket_create() .

protocol

Параметр protocol устанавливает определённый протокол в указанном семействе протоколов domain, который будет использоваться при связи с полученными сокетами. Соответствующее значение может быть получено по имени при помощи функции getprotobyname() . Если требуемый протокол TCP или UDP, то соответствующие константы SOL_TCP и SOL_UDP также могут быть использованы.

Смотрите полный список поддерживаемых протоколов в описании функции socket_create() .

pair

Ссылка на массив, в который будут вставлены два экземпляра Socket .

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

Функция возвращает true , если выполнилась успешно, или false , если возникла ошибка.

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

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

Примеры

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

<?php
$sockets = array();
/* На Windows нам нужно использовать AF_INET */
$domain = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' ? AF_INET : AF_UNIX);
/* Создаём пару сокетов */
if (socket_create_pair($domain, SOCK_STREAM, 0, $sockets) === false) {
 echo "Не получилось выполнить socket_create_pair. Причина: ".socket_strerror(socket_last_error());
}
/* Отправляем и получаем данные */
if (socket_write($sockets[0], "ABCdef123\n", strlen("ABCdef123\n")) === false) {
 echo "Не получилось выполнить socket_write(). Причина: ".socket_strerror(socket_last_error($sockets[0]));
}
if (($data = socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ)) === false) {
 echo "Не получилось выполнить socket_read(). Причина: ".socket_strerror(socket_last_error($sockets[1]));
}
var_dump($data);
/* Закрываем сокеты */
socket_close($sockets[0]);
socket_close($sockets[1]);
?>

Пример #2 Пример использования socket_create_pair() в IPC

<?php
$ary = array();
$strone = 'Сообщение от родительского процесса.';
$strtwo = 'Сообщение от дочернего процесса.';
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $ary) === false) {
 echo "Не получилось выполнить socket_create_pair(). Причина: ".socket_strerror(socket_last_error());
}
$pid = pcntl_fork();
if ($pid == -1) {
 echo 'Не могу создать новый процесс.';
} elseif ($pid) {
 /*родительский процесс*/
 socket_close($ary[0]);
 if (socket_write($ary[1], $strone, strlen($strone)) === false) {
 echo "Не получилось выполнить socket_write(). Причина: ".socket_strerror(socket_last_error($ary[1]));
 }
 if (socket_read($ary[1], strlen($strtwo), PHP_BINARY_READ) == $strtwo) {
 echo "Получено $strtwo\n";
 }
 socket_close($ary[1]);
} else {
 /*дочерний процесс*/
 socket_close($ary[1]);
 if (socket_write($ary[0], $strtwo, strlen($strtwo)) === false) {
 echo "Не получилось выполнить socket_write(). Причина: ".socket_strerror(socket_last_error($ary[0]));
 }
 if (socket_read($ary[0], strlen($strone), PHP_BINARY_READ) == $strone) {
 echo "Получено $strone\n";
 }
 socket_close($ary[0]);
}
?>

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

  • socket_create() - Создаёт сокет (конечную точку для обмена информацией)
  • socket_create_listen() - Открывает сокет на заданном порте для принятия соединений
  • socket_bind() - Привязывает имя к сокету
  • socket_listen() - Прослушивает входящие соединения на сокете
  • socket_last_error() - Возвращает последнюю ошибку сокета
  • socket_strerror() - Возвращает строку, описывающую ошибку сокета

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 1 note

up
3
cweiske at php dot net
17 years ago
The underlying sockpair() function does only support AF_UNIX at least on BSD and Linux.
+Добавить

AltStyle によって変換されたページ (->オリジナル) /