socket_create_pair
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
socket_create_pair — Создаёт пару неразличимых сокетов и сохраняет их в массиве
Описание
$domain
, int $type
, int $protocol
, array &$fd
)
socket_create_pair() создаёт два соединённых и
неразличимых сокета, и сохраняет их в массиве fd
.
Эта функция обычно используется IPC (межпроцессном взаимодействии).
Список параметров
-
domain
-
Параметр
domain
определяет семейство протоколов, которое будет использоваться сокетом. Смотрите их полный список в описании функции socket_create(). -
type
-
Параметр
type
указывает тип коммуникации, которая будет использоваться сокетом. Смотрите их полный список в описании функции socket_create(). -
protocol
-
Параметр
protocol
устанавливает определённый протокол в указанном семействе протоколовdomain
, который будет использоваться при связи с полученными сокетами. Соответствующее значение может быть получено по имени при помощи функции getprotobyname(). Если требуемый протокол TCP или UDP, то соответствующие константыSOL_TCP
иSOL_UDP
также могут быть использованы.Смотрите полный список поддерживаемых протоколов в описании функции socket_create().
-
fd
-
Ссылка на массив, в который будут вставлены два ресурса сокетов.
Возвращаемые значения
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
5.3.0 | Эта функция теперь вновь доступна на Windows-платформах. |
4.3.0 | Эта функция из-за бага недоступна на Windows-платформах. |
Примеры
Пример #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() - Create a socket (endpoint for communication)
- socket_create_listen() - Открывает сокет на указанном порту для принятия соединений
- socket_bind() - Привязывает имя к сокету
- socket_listen() - Listens for a connection on a socket
- socket_last_error() - Возвращает последнюю ошибку на сокете
- socket_strerror() - Возвращает строку, описывающую ошибку сокета
- socket_accept
- socket_bind
- socket_clear_error
- socket_close
- socket_cmsg_space
- socket_connect
- socket_create_listen
- socket_create_pair
- socket_create
- socket_get_option
- socket_getopt
- socket_getpeername
- socket_getsockname
- socket_import_stream
- socket_last_error
- socket_listen
- socket_read
- socket_recv
- socket_recvfrom
- socket_recvmsg
- socket_select
- socket_send
- socket_sendmsg
- socket_sendto
- socket_set_block
- socket_set_nonblock
- socket_set_option
- socket_setopt
- socket_shutdown
- socket_strerror
- socket_write
Коментарии
The underlying sockpair() function does only support AF_UNIX at least on BSD and Linux.