<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.sockets.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'function.socket-create-pair.php',
    1 => 'socket_create_pair',
    2 => 'Crea una coppia di socket non distinguibili e li memorizza in una matrice',
  ),
  'up' => 
  array (
    0 => 'ref.sockets.php',
    1 => 'Socket Funzioni',
  ),
  'prev' => 
  array (
    0 => 'function.socket-create-listen.php',
    1 => 'socket_create_listen',
  ),
  'next' => 
  array (
    0 => 'function.socket-export-stream.php',
    1 => 'socket_export_stream',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'reference/sockets/functions/socket-create-pair.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.socket-create-pair" class="refentry">
   <div class="refnamediv">
    <h1 class="refname">socket_create_pair</h1>
    <p class="verinfo">(PHP 4 &gt;= 4.1.0, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">socket_create_pair</span> &mdash; <span class="dc-title">Crea una coppia di socket non distinguibili e li memorizza in una matrice</span></p>

   </div>
   <div class="refsect1 unknown-1135" id="refsect1-function.socket-create-pair-unknown-1135">
    <h3 class="title">Descrizione</h3>
     <div class="methodsynopsis dc-description">
      <span class="methodname"><strong>socket_create_pair</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$domain</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$type</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$protocol</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter">$&amp;fd</code></span><br>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

     <div class="warning"><strong class="warning">Avviso</strong><p class="simpara">Questa funzione è
<em>SPERIMENTALE</em>. 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&#039;uso di questa
funzione è a vostro rischio.</p></div>
    <p class="para">
     La funzione <span class="function"><strong>socket_create_pair()</strong></span> crea due socket connessi ed indistinguibili e li memorizza
     in <code class="parameter">&amp;fd</code>. Questa funzione è comunemente utilizzate per l&#039;IPC (InterProcess Communication, comunicazione tra processi).
    </p> 
    <p class="para"> 
     Il parametro <code class="parameter">domain</code> specifica la famiglia di protocolli
     da usare per il socket.
    </p> 
    <table class="doctable table"> 
    <caption><strong>Famiglie di indirizzi/protocolli disponibili</strong></caption> 
     
     <thead> 
      <tr> 
       <th>Dominio</th> 
       <th>Descrizione</th> 
      </tr>
 
     </thead>
 
     <tbody class="tbody"> 
      <tr> 
       <td>AF_INET</td> 
       <td> 
        Protocollo Internet basato su IPv4. Il TCP e l&#039;UDP sono i protocolli 
        più comuni di questa famiglia. Supportati solo in Windows.
       </td> 
      </tr>
 
      <tr> 
       <td>AF_INET6</td> 
       <td> 
        Protocollo Internet basato su IPv6. Il TCP e l&#039;UDP sono i protocolli 
        più comuni di questa famiglia. Supportati solo in Windows.
        IPv6 Internet based protocols. Supporto aggiunto in PHP 5.0.0.
       </td> 
      </tr>
 
      <tr> 
       <td>AF_UNIX</td> 
       <td> 
        Famiglia di protocolli per la comunicazione locale. Molto efficiente, basso overhead
        permettono un buon tipo di IPC (Interprocess Communication). 
       </td> 
      </tr>
 
     </tbody> 
     
    </table>
 
    <p class="para"> 
     Il parametro <code class="parameter">type</code> seleziona il tipo di comunicazione
     da utilizzare con il socket.
    </p> 
    <table class="doctable table"> 
    <caption><strong>Tipi di socket disponibili</strong></caption> 
      
     <thead> 
      <tr> 
       <th>Tipo</th> 
       <th>Descrizione</th> 
      </tr>
 
     </thead>
 
     <tbody class="tbody"> 
      <tr> 
       <td>SOCK_STREAM</td> 
       <td> 
         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.
       </td> 
      </tr>
 
      <tr> 
       <td>SOCK_DGRAM</td> 
       <td> 
         Supporta i datagrammi (privo di connessione, messaggi inaffidabili di una lunghezza massima prefissata).
         Il protocollo UDP è basato su questo tipo di socket.
       </td> 
      </tr>
 
      <tr> 
       <td>SOCK_SEQPACKET</td> 
       <td> 
         Fornisce una trasmissione di dati sequenziale, affidabile, bi-direzionale per i 
         datagrammi di lunghezza massima prefissata; all&#039;utilizzatore è richiesto di 
         leggere l&#039;intero pacchetto in ogni esecuzione della funzione di lettura dal socket.
       </td> 
      </tr>
 
      <tr> 
       <td>SOCK_RAW</td> 
       <td> 
         Fornisce un&#039;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).
       </td> 
      </tr>
 
      <tr> 
       <td>SOCK_RDM</td> 
       <td> 
         Fornisce un&#039;interfaccia affidabile per i datagrammi ma non ne garantisce l&#039;ordine.
         Probabilmente questo non è implementato nel vostro sistema operativo.
       </td> 
      </tr>
 
     </tbody> 
     
    </table>
 
    <p class="para"> 
     Il parametro <code class="parameter">protocol</code> indica 
     lo specifico protocollo nel <code class="parameter">domain</code> indicato da usarsi
     con il socket restituito. Il valore opportuno può essere recuperato
     utilizzando <span class="function"><a href="function.getprotobyname.php" class="function">getprotobyname()</a></span>. Se il protocollo 
     desiderato è il TCP o l&#039;UDP, si possono utilizzare le corrispondenti costanti
     <strong><code><a href="sockets.constants.php#constant.sol-udp">SOL_UDP</a></code></strong> e <strong><code><a href="sockets.constants.php#constant.sol-tcp">SOL_TCP</a></code></strong>. 
    </p> 
    <table class="doctable table"> 
    <caption><strong>Protocolli comuni</strong></caption> 
    
     <thead>
      <tr>
       <th>Nome</th>
       <th>Descrizione</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>icmp</td>
       <td>
        L&#039;Internet Control Message Protocol viene utilizzato principalmente dai gateway
        e dagli host per riportare errori nelle comunicazioni con datagrammi. Il 
        comando &quot;ping&quot; (presente in quasi tutti i moderni sistemi operativi) è un esempio
        dell&#039;applicazione di ICMP.
       </td>
      </tr>

      <tr>
       <td>udp</td>
       <td>
        Lo User Datagram Protocol è un protocollo privo di connessione,
        inaffidabile con record di lunghezza fissa. Per questo l&#039;UDP
        richiede poco overhead di protocollo.
       </td>       
      </tr>

        <tr>
       <td>tcp</td>
       <td>
        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&#039;host remoto non conferma la ricezione dello stesso. Per ragioni
        di affidabilità e di prestazioni, è il TCP stesso a decidere l&#039;appropriata dimensione 
        dei pacchetti del sottostante livello di datagrammi. Pertanto le applicazioni TCP devono
        permettere la parziale ritrasmissione di un record.
       </td>
      </tr>

     </tbody>
    
    </table>
 
    <p class="para"> 
    <div class="example" id="example-1"> 
    <p><strong>Example #1 Esempio di uso di <span class="function"><strong>socket_create_pair()</strong></span></strong></p> 
    <div class="example-contents"> 
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php <br />$sockets </span><span style="color: #007700">= array(); <br /></span><span style="color: #0000BB">$uniqid </span><span style="color: #007700">= </span><span style="color: #0000BB">uniqid</span><span style="color: #007700">(</span><span style="color: #DD0000">''</span><span style="color: #007700">); <br />if (</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">"/tmp/</span><span style="color: #0000BB">$uniqid</span><span style="color: #DD0000">.sock"</span><span style="color: #007700">)) { <br />    die(</span><span style="color: #DD0000">'Temporary socket already exists.'</span><span style="color: #007700">); <br />} <br /></span><span style="color: #FF8000">/* Setup socket pair */ <br /></span><span style="color: #007700">if (!</span><span style="color: #0000BB">socket_create_pair</span><span style="color: #007700">(</span><span style="color: #0000BB">AF_UNIX</span><span style="color: #007700">, </span><span style="color: #0000BB">SOCK_STREAM</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">$sockets</span><span style="color: #007700">)) { <br />    echo </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">()); <br />} <br /></span><span style="color: #FF8000">/* Send and Recieve Data */ <br /></span><span style="color: #007700">if (!</span><span style="color: #0000BB">socket_write</span><span style="color: #007700">(</span><span style="color: #0000BB">$sockets</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">], </span><span style="color: #DD0000">"ABCdef123\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #DD0000">"ABCdef123\n"</span><span style="color: #007700">))) { <br />    echo </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">()); <br />} <br />if (!</span><span style="color: #0000BB">$data </span><span style="color: #007700">= </span><span style="color: #0000BB">socket_read</span><span style="color: #007700">(</span><span style="color: #0000BB">$sockets</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">], </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #DD0000">"ABCdef123\n"</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_BINARY_READ</span><span style="color: #007700">)) { <br />    echo </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">()); <br />} <br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">); <br /> <br /></span><span style="color: #FF8000">/* Close sockets */ <br /></span><span style="color: #0000BB">socket_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$sockets</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]); <br /></span><span style="color: #0000BB">socket_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$sockets</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]); <br /></span><span style="color: #0000BB">?&gt;</span></span></code></div> 
    </div>
 
    </div> 
    </p> 
    <p class="para"> 
    <div class="example" id="example-2"> 
    <p><strong>Example #2 Esempio di IPC con <span class="function"><strong>socket_create_pair()</strong></span></strong></p> 
    <div class="example-contents"> 
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php <br />$ary </span><span style="color: #007700">= array(); <br /></span><span style="color: #0000BB">$strone </span><span style="color: #007700">= </span><span style="color: #DD0000">'Message From Parent.'</span><span style="color: #007700">; <br /></span><span style="color: #0000BB">$strtwo </span><span style="color: #007700">= </span><span style="color: #DD0000">'Message From Child.'</span><span style="color: #007700">; <br />if (!</span><span style="color: #0000BB">socket_create_pair</span><span style="color: #007700">(</span><span style="color: #0000BB">AF_UNIX</span><span style="color: #007700">, </span><span style="color: #0000BB">SOCK_STREAM</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">$ary</span><span style="color: #007700">)) { <br />    echo </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">()); <br />} <br /></span><span style="color: #0000BB">$pid </span><span style="color: #007700">= </span><span style="color: #0000BB">pcntl_fork</span><span style="color: #007700">(); <br />if (</span><span style="color: #0000BB">$pid </span><span style="color: #007700">== -</span><span style="color: #0000BB">1</span><span style="color: #007700">) { <br />    echo </span><span style="color: #DD0000">'Could not fork Process.'</span><span style="color: #007700">; <br />} elseif (</span><span style="color: #0000BB">$pid</span><span style="color: #007700">) { <br />    </span><span style="color: #FF8000">/*parent*/ <br />    </span><span style="color: #0000BB">socket_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$ary</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]); <br />    if (!</span><span style="color: #0000BB">socket_write</span><span style="color: #007700">(</span><span style="color: #0000BB">$ary</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">], </span><span style="color: #0000BB">$strone</span><span style="color: #007700">, </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$strone</span><span style="color: #007700">))) { <br />            echo </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">()); <br />    } <br />    if (</span><span style="color: #0000BB">socket_read</span><span style="color: #007700">(</span><span style="color: #0000BB">$ary</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">], </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$strtwo</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_BINARY_READ</span><span style="color: #007700">) == </span><span style="color: #0000BB">$strtwo</span><span style="color: #007700">) { <br />        echo </span><span style="color: #DD0000">"Recieved </span><span style="color: #0000BB">$strtwo</span><span style="color: #DD0000">\n"</span><span style="color: #007700">; <br />    } <br />    </span><span style="color: #0000BB">socket_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$ary</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]);<br />} else { <br />    </span><span style="color: #FF8000">/*child*/ <br />    </span><span style="color: #0000BB">socket_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$ary</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]); <br />    if (!</span><span style="color: #0000BB">socket_write</span><span style="color: #007700">(</span><span style="color: #0000BB">$ary</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">], </span><span style="color: #0000BB">$strtwo</span><span style="color: #007700">, </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$strtwo</span><span style="color: #007700">))) { <br />        echo </span><span style="color: #0000BB">socket_strerror</span><span style="color: #007700">(</span><span style="color: #0000BB">socket_last_error</span><span style="color: #007700">()); <br />    } <br />    if (</span><span style="color: #0000BB">socket_read</span><span style="color: #007700">(</span><span style="color: #0000BB">$ary</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">], </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$strone</span><span style="color: #007700">), </span><span style="color: #0000BB">PHP_BINARY_READ</span><span style="color: #007700">) == </span><span style="color: #0000BB">$strone</span><span style="color: #007700">) { <br />        echo </span><span style="color: #DD0000">"Recieved </span><span style="color: #0000BB">$strone</span><span style="color: #DD0000">\n"</span><span style="color: #007700">; <br />    } <br />    </span><span style="color: #0000BB">socket_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$ary</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);<br />} <br /></span><span style="color: #0000BB">?&gt;</span></span></code></div> 
    </div>
 
    </div>
    </p>
   </div>

  </div><?php manual_footer($setup); ?>