downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

stream_socket_recvfrom> <stream_socket_get_name
[edit] Last updated: Fri, 17 May 2013

view this page in

stream_socket_pair

(PHP 5 >= 5.1.0)

stream_socket_pair Crea un pareja de flujos de socket conectados e indistinguibles

Descripción

array stream_socket_pair ( int $domain , int $type , int $protocol )

stream_socket_pair() crea un pareja de flujos de socket conectados e indistinguibles. Esta fnción se usa normalmente en IPC (Inter-Process Communication, Comunicación entre Procesos).

Parámetros

domain

La familia de protocolos que se va a usar: STREAM_PF_INET, STREAM_PF_INET6 o STREAM_PF_UNIX

type

El tipo de comunicación que se va a usar: STREAM_SOCK_DGRAM, STREAM_SOCK_RAW, STREAM_SOCK_RDM, STREAM_SOCK_SEQPACKET o STREAM_SOCK_STREAM

protocol

El protocolo que se va a usar: STREAM_IPPROTO_ICMP, STREAM_IPPROTO_IP, STREAM_IPPROTO_RAW, STREAM_IPPROTO_TCP o STREAM_IPPROTO_UDP

Nota: Por favor, consulte la lista de constantes de Flujos para más detalles de cada constante.

Valores devueltos

Devuelve un array con los dos recursos de socket si se tuvo éxito, o FALSE si falló.

Historial de cambios

Versión Descripción
5.3.0 Esta función ahora está disponible en plataformas Windows.

Ejemplos

Ejemplo #1 Un ejemplo de stream_socket_pair()

Este ejemplo muestra el uso básico de stream_socket_pair() en Comunciación entre Proceses (IPC).

<?php

$sockets 
stream_socket_pair(STREAM_PF_UNIXSTREAM_SOCK_STREAMSTREAM_IPPROTO_IP);
$pid     pcntl_fork();

if (
$pid == -1) {
     die(
'no se pudo bifurcar');

} else if (
$pid) {
     
/* padre */
    
fclose($sockets[0]);

    
fwrite($sockets[1], "PID hijo: $pid\n");
    echo 
fgets($sockets[1]);

    
fclose($sockets[1]);

} else {
    
/* hijo */
    
fclose($sockets[1]);

    
fwrite($sockets[0], "mensaje desde el hijo\n");
    echo 
fgets($sockets[0]);

    
fclose($sockets[0]);
}

?>

El resultado del ejemplo sería algo similar a:

PID hijo: 1378
mensaje desde el hijo



add a note add a note User Contributed Notes stream_socket_pair - [1 notes]
up
-1
Till
5 years ago
This is some freak-example how to use this feature to fork to a
bc-command on a Solaris-Server:

<?
$sockets
=stream_socket_pair(STREAM_PF_UNIX,STREAM_SOCK_STREAM,
                                               
STREAM_IPPROTO_IP);
passthru('
    perl -e \'
        use strict; my ($x,@x);
        open(STDIN,"-|","/bin/pfiles $$");
        while (<>) { $x=$1 if(/^ +([0-9]+):/); push(@x,$x) if(/AF_UNIX/); }
        print "Starting bc -l 0<&$x[1] 1>&$x[1] $x[0]<&- $x[0]>&- ...\n\n";
        exec("bash","-c","bc -l 0<&$x[1] 1>&$x[1] $x[0]<&- $x[0]>&- &");\''
);

fclose($sockets[0]);

fwrite($sockets[1],"666*999\n");
print
"666*999 = ".fgets($sockets[1])."\n";

fwrite($sockets[1],"./696\n");
print
"./696 = ".fgets($sockets[1])."\n";

fwrite($sockets[1],"quit\n");
fclose($sockets[1]);
?>

The big problem is, that there seems to be no way to obtain the real
filedescriptors of the two sockets, but you need them, if you want to
redirect some program's STDOUT and STDIN to one of these sockets.

I misused the /bin/pfiles command on a Solaris UNIX to find them.
Another (non-php-) problem is, that, if you use php in Apache, there
will be already a lot of open filedescriptors and the filedescriptors
of the sockets will be greater than 9. That's why I had to use the bash.

I think it is awful, but it works. Would be great, if someone
would come up with a better idea.

 
show source | credits | sitemap | contact | advertising | mirror sites