(PHP 4 >= 4.1.0, PHP 5)
socket_create_pair — Crea una coppia di socket non distinguibili e li memorizza in una matrice
$domain
      , int $type
      , int $protocol
      , array $&fd
      )Questa funzione è SPERIMENTALE. Ovvero, il comportamento di questa funzione, il nome di questa funzione, in definitiva tutto ciò che è documentato qui può cambiare nei futuri rilasci del PHP senza preavviso. Siete avvisati, l'uso di questa funzione è a vostro rischio.
     La funzione socket_create_pair() crea due socket connessi ed indistinguibili e li memorizza
     in &fd. Questa funzione è comunemente utilizzate per l'IPC (InterProcess Communication, comunicazione tra processi).
    
 
     Il parametro domain specifica la famiglia di protocolli
     da usare per il socket.
    
| Dominio | Descrizione | 
|---|---|
| AF_INET | Protocollo Internet basato su IPv4. Il TCP e l'UDP sono i protocolli più comuni di questa famiglia. Supportati solo in Windows. | 
| AF_INET6 | Protocollo Internet basato su IPv6. Il TCP e l'UDP sono i protocolli più comuni di questa famiglia. Supportati solo in Windows. IPv6 Internet based protocols. Supporto aggiunto in PHP 5.0.0. | 
| AF_UNIX | Famiglia di protocolli per la comunicazione locale. Molto efficiente, basso overhead permettono un buon tipo di IPC (Interprocess Communication). | 
 
     Il parametro type seleziona il tipo di comunicazione
     da utilizzare con il socket.
    
| Tipo | Descrizione | 
|---|---|
| SOCK_STREAM | Fornisce una connessione sequenziale, affidabile e full-duplex. Può essere supportato un meccanismo di trasmissione fuori-banda. Il protocollo TCP è basato su questo tipo di socket. | 
| SOCK_DGRAM | Supporta i datagrammi (privo di connessione, messaggi inaffidabili di una lunghezza massima prefissata). Il protocollo UDP è basato su questo tipo di socket. | 
| SOCK_SEQPACKET | Fornisce una trasmissione di dati sequenziale, affidabile, bi-direzionale per i datagrammi di lunghezza massima prefissata; all'utilizzatore è richiesto di leggere l'intero pacchetto in ogni esecuzione della funzione di lettura dal socket. | 
| SOCK_RAW | Fornisce un'accesso raw al protocollo di rete. Questo tipo di socket può essere utilizzato per costruire manualmente qualsiasi tipo di protocollo. Un comune utilizzo di questa tipologia di socket è la realizzazione di richieste ICMP (tipo il ping o traceroute). | 
| SOCK_RDM | Fornisce un'interfaccia affidabile per i datagrammi ma non ne garantisce l'ordine. Probabilmente questo non è implementato nel vostro sistema operativo. | 
 
     Il parametro protocol indica 
     lo specifico protocollo nel domain indicato da usarsi
     con il socket restituito. Il valore opportuno può essere recuperato
     utilizzando getprotobyname(). Se il protocollo 
     desiderato è il TCP o l'UDP, si possono utilizzare le corrispondenti costanti
     SOL_UDP e SOL_TCP. 
    
| Nome | Descrizione | 
|---|---|
| icmp | L'Internet Control Message Protocol viene utilizzato principalmente dai gateway e dagli host per riportare errori nelle comunicazioni con datagrammi. Il comando "ping" (presente in quasi tutti i moderni sistemi operativi) è un esempio dell'applicazione di ICMP. | 
| udp | Lo User Datagram Protocol è un protocollo privo di connessione, inaffidabile con record di lunghezza fissa. Per questo l'UDP richiede poco overhead di protocollo. | 
| tcp | Il Transmission Control Protocol è un procotollo affidabile, basato sulla connessione, orientato al flusso, full duplex. Il TCP garantisce che tutti i pacchetti siano ricevuti nel medesimo ordine in cui siano stati inviati. Se un pacchetto viene perso durante la trasmissione, il TCP provvederà automaticamente alla ritrasmissione fino a quando l'host remoto non conferma la ricezione dello stesso. Per ragioni di affidabilità e di prestazioni, è il TCP stesso a decidere l'appropriata dimensione dei pacchetti del sottostante livello di datagrammi. Pertanto le applicazioni TCP devono permettere la parziale ritrasmissione di un record. | 
Example #1 Esempio di uso di socket_create_pair()
<?php 
$sockets = array(); 
$uniqid = uniqid(''); 
if (file_exists("/tmp/$uniqid.sock")) { 
    die('Temporary socket already exists.'); 
} 
/* Setup socket pair */ 
if (!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $sockets)) { 
    echo socket_strerror(socket_last_error()); 
} 
/* Send and Recieve Data */ 
if (!socket_write($sockets[0], "ABCdef123\n", strlen("ABCdef123\n"))) { 
    echo socket_strerror(socket_last_error()); 
} 
if (!$data = socket_read($sockets[1], strlen("ABCdef123\n"), PHP_BINARY_READ)) { 
    echo socket_strerror(socket_last_error()); 
} 
var_dump($data); 
 
/* Close sockets */ 
socket_close($sockets[0]); 
socket_close($sockets[1]); 
?>
Example #2 Esempio di IPC con socket_create_pair()
<?php 
$ary = array(); 
$strone = 'Message From Parent.'; 
$strtwo = 'Message From Child.'; 
if (!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $ary)) { 
    echo socket_strerror(socket_last_error()); 
} 
$pid = pcntl_fork(); 
if ($pid == -1) { 
    echo 'Could not fork Process.'; 
} elseif ($pid) { 
    /*parent*/ 
    socket_close($ary[0]); 
    if (!socket_write($ary[1], $strone, strlen($strone))) { 
            echo socket_strerror(socket_last_error()); 
    } 
    if (socket_read($ary[1], strlen($strtwo), PHP_BINARY_READ) == $strtwo) { 
        echo "Recieved $strtwo\n"; 
    } 
    socket_close($ary[1]);
} else { 
    /*child*/ 
    socket_close($ary[1]); 
    if (!socket_write($ary[0], $strtwo, strlen($strtwo))) { 
        echo socket_strerror(socket_last_error()); 
    } 
    if (socket_read($ary[0], strlen($strone), PHP_BINARY_READ) == $strone) { 
        echo "Recieved $strone\n"; 
    } 
    socket_close($ary[0]);
} 
?>