The underlying sockpair() function does only support AF_UNIX at least on BSD and Linux.
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_create_pair — Crea un par de sockets idénticos y los almacena en un array
socket_create_pair() crea un par de sockets idénticos y los almacena
en pair
. Esta función se utiliza comúnmente en
IPC (InterProcess Communication
).
domain
El argumento domain
especifica la familia del protocolo a utilizar por
el socket. Ver la documentación sobre la función socket_create()
para una lista completa.
type
El argumento type
especifica el tipo de
comunicación a utilizar por el socket. Ver la documentación
sobre la función socket_create() para una lista
completa.
protocol
El argumento protocol
define un protocolo
específico en el dominio especificado domain
para ser utilizado durante una comunicación en un socket devuelto.
El valor apropiado puede ser encontrado por su nombre utilizando
la función getprotobyname(). Si el protocolo
deseado es TCP o UDP, las constantes correspondientes
SOL_TCP
y SOL_UDP
pueden
ser utilizadas.
Ver la documentación sobre la función socket_create() para una lista completa de los protocolos soportados.
pair
Una referencia a un array en el cual las dos instancias de Socket serán insertadas.
Versión | Descripción |
---|---|
8.0.0 |
pair es una referencia a un array de instancias de
Socket; anteriormente, era una referencia a un
array de resources.
|
Ejemplo #1 Ejemplo con socket_create_pair()
<?php
$sockets = array();
/* En Windows, debemos utilizar AF_INET */
$domain = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' ? AF_INET : AF_UNIX);
/* Creación del par de sockets */
if (socket_create_pair($domain, SOCK_STREAM, 0, $sockets) === false) {
echo "socket_create_pair ha fallado. Razón: ".socket_strerror(socket_last_error());
}
/* Envío y recepción de datos */
if (socket_write($sockets[0], "ABCdef123\n", strlen("ABCdef123\n")) === false) {
echo "socket_write() ha fallado. Razón: ".socket_strerror(socket_last_error($sockets[0]));
}
if (($data = socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ)) === false) {
echo "socket_read() ha fallado. Razón: ".socket_strerror(socket_last_error($sockets[1]));
}
var_dump($data);
/* Cierre de los sockets */
socket_close($sockets[0]);
socket_close($sockets[1]);
?>
Ejemplo #2 Ejemplo IPC con socket_create_pair()
<?php
$ary = array();
$strone = 'Mensaje desde el padre.';
$strtwo = 'Mensaje desde el hijo.';
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $ary) === false) {
echo "socket_create_pair() ha fallado. Razón: ".socket_strerror(socket_last_error());
}
$pid = pcntl_fork();
if ($pid == -1) {
echo 'No es posible duplicar el proceso.';
} elseif ($pid) {
/* padre */
socket_close($ary[0]);
if (socket_write($ary[1], $strone, strlen($strone)) === false) {
echo "socket_write() ha fallado. Razón: ".socket_strerror(socket_last_error($ary[1]));
}
if (socket_read($ary[1], strlen($strtwo), PHP_BINARY_READ) == $strtwo) {
echo "Recepción de $strtwo\n";
}
socket_close($ary[1]);
} else {
/* hijo */
socket_close($ary[1]);
if (socket_write($ary[0], $strtwo, strlen($strtwo)) === false) {
echo "socket_write() ha fallado. Razón: ".socket_strerror(socket_last_error($ary[0]));
}
if (socket_read($ary[0], strlen($strone), PHP_BINARY_READ) == $strone) {
echo "Recepción de $strone\n";
}
socket_close($ary[0]);
}
?>
The underlying sockpair() function does only support AF_UNIX at least on BSD and Linux.