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

search for in the

stream_socket_recvfrom> <stream_socket_get_name
Last updated: Fri, 18 Jul 2008

view this page in

stream_socket_pair

(PHP 5 >= 5.1.0)

stream_socket_pair — Crea un par de secuencias de socket conectados e indistinguibles

Descripción

array stream_socket_pair ( int $dominio , int $tipo , int $protocolo )

stream_socket_pair() crea un par de secuencias de socket conectados e indistinguibles. Esta función es usada comúnmente en Comunicación Inter-Procesos (IPC por sus siglas en inglés).

Lista de parámetros

dominio

La familia de protocolo a usar: STREAM_PF_INET, STREAM_PF_INET6 oo STREAM_PF_UNIX

tipo

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

protocolo

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

Note: Por favor consulte la Lista de constantes de secuencias para más detalles sobre cada constante.

Valores retornados

Devuelve un valor tipo array con los dos recursos de socket en caso de éxito, o FALSE si ocurre un error.

Ejemplos

Example #1 Un ejemplo de stream_socket_pair()

Este ejemplo muestra el uso básico de stream_socket_pair() en Comunicación Inter-Procesos.

<?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 seria algo similar a:

PID hijo: 1378
mensaje desde el hijo



add a note add a note User Contributed Notes
stream_socket_pair
Till
02-Aug-2007 05:47
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.

stream_socket_recvfrom> <stream_socket_get_name
Last updated: Fri, 18 Jul 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites