PHP 5.6.0 released

socket_create_pair

(PHP 4 >= 4.1.0, PHP 5)

socket_create_pairCrea un par de sockets indistinguibles y los almacena en una matriz

Descripción

bool socket_create_pair ( int $domain , int $type , int $protocol , array &$fd )

socket_create_pair() crea dos sockets conectados e indistinguibles y los almacena en fd. Esta función se usa comúnmente en IPC (InterProcess Communication - Comunicación entre procesos).

Parámetros

domain

El parámetro domain especifica la familia de protocolos que se va a usar en el socket. Véase socket_create() para la lista completa.

type

El parámetro type selecciona el tipo de comunicación que va a usar el socket. Véase socket_create() para la lista completa.

protocol

El parámetro protocol establece el protocolo específico dentro del domain especificado a usar cuando se comunica con el socket devuelto. El valor apropiado se puede recuperar por nombre usando getprotobyname(). Si el protocolo deseado es TCP, o UDP, se pueden usar también las constantes SOL_TCP, y SOL_UDP correspondientes.

Véase socket_create() para la lista completa de protocolos soportados.

fd

Referencia a una matriz en la cuál los dos recursos socket serán insertados.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.3.0 Esta función ahora es rehabilitada en plataformas Windows.
4.3.0 Esta función no estaba disponible en plataformas Windows a causa de un error.

Ejemplos

Ejemplo #1 Ejemplo de socket_create_pair()

<?php
$sockets 
= array();

/* En Windows necesitamos usar AF_INET */
$domain = (strtoupper(substr(PHP_OS03)) == 'WIN' AF_INET AF_UNIX);

/* Configurar el par de sockets */
if (socket_create_pair($domainSOCK_STREAM0$sockets) === false) {
    echo 
"socket_create_pair failed. Reason: ".socket_strerror(socket_last_error());
}
/* Enviar y Recibir Información */
if (socket_write($sockets[0], "ABCdef123\n"strlen("ABCdef123\n")) === false) {
    echo 
"socket_write() failed. Reason: ".socket_strerror(socket_last_error($sockets[0]));
}
if ((
$data socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ)) === false) {
    echo 
"socket_read() failed. Reason: ".socket_strerror(socket_last_error($sockets[1]));
}
var_dump($data);

/* Cerrar los sockets */
socket_close($sockets[0]);
socket_close($sockets[1]);
?>

Ejemplo #2 Ejemplo IPC de socket_create_pair()

<?php
$ary 
= array();
$strone 'Mensaje del Padre.';
$strtwo 'Mensaje del Hijo.';

if (
socket_create_pair(AF_UNIXSOCK_STREAM0$ary) === false) {
    echo 
"socket_create_pair() failed. Reason: ".socket_strerror(socket_last_error());
}
$pid pcntl_fork();
if (
$pid == -1) {
    echo 
'Could not fork Process.';
} elseif (
$pid) {
    
/*padre*/
    
socket_close($ary[0]);
    if (
socket_write($ary[1], $stronestrlen($strone)) === false) {
        echo 
"socket_write() failed. Reason: ".socket_strerror(socket_last_error($ary[1]));
    }
    if (
socket_read($ary[1], strlen($strtwo), PHP_BINARY_READ) == $strtwo) {
        echo 
"Recieved $strtwo\n";
    }
    
socket_close($ary[1]);
} else {
    
/*hijo*/
    
socket_close($ary[1]);
    if (
socket_write($ary[0], $strtwostrlen($strtwo)) === false) {
        echo 
"socket_write() failed. Reason: ".socket_strerror(socket_last_error($ary[0]));
    }
    if (
socket_read($ary[0], strlen($strone), PHP_BINARY_READ) == $strone) {
        echo 
"Recieved $strone\n";
    }
    
socket_close($ary[0]);
}
?>

Ver también

add a note add a note

User Contributed Notes 2 notes

up
0
cweiske at php dot net
5 years ago
The underlying sockpair() function does only support AF_UNIX at least on BSD and Linux.
up
0
thegreatall at gmail dot com
7 years ago
There is a syntax error in one of the code samples provided, it should look like this:
<?php
$sockets
= array();
/* Setup socket pair */
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $sockets) === false) {
    echo
"socket_create_pair failed. Reason: ".socket_strerror(socket_last_error());
}
/* Send and Recieve Data */
if (socket_write($sockets[0], "ABCdef123\n", strlen("ABCdef123\n")) === false) {
    echo
"socket_write() failed. Reason: ".socket_strerror(socket_last_error($sockets[0]));
}
if ((
$data = socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ)) === false) {
    echo
"socket_read() failed. Reason: ".socket_strerror(socket_last_error($sockets[1]));
}
var_dump($data);

/* Close sockets */
socket_close($sockets[0]);
socket_close($sockets[1]);
?>
To Top