<?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.php',
    1 => 'socket_create',
    2 => 'Crea un socket (punto terminale di una comunicazione).',
  ),
  'up' => 
  array (
    0 => 'ref.sockets.php',
    1 => 'Socket Funzioni',
  ),
  'prev' => 
  array (
    0 => 'function.socket-connect.php',
    1 => 'socket_connect',
  ),
  'next' => 
  array (
    0 => 'function.socket-create-listen.php',
    1 => 'socket_create_listen',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'reference/sockets/functions/socket-create.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.socket-create" class="refentry">
   <div class="refnamediv">
    <h1 class="refname">socket_create</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</span> &mdash; <span class="dc-title">Crea un socket (punto terminale di una comunicazione).</span></p>

   </div>
   <div class="refsect1 unknown-1129" id="refsect1-function.socket-create-unknown-1129">
    <h3 class="title">Descrizione</h3>
     <div class="methodsynopsis dc-description">
      <span class="methodname"><strong>socket_create</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$dominio</code></span>, <span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$tipo</code></span>, <span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$protocollo</code></span>): <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span></div>

    <p class="para rdfs-comment">
     La funzione crea un punto terminale di una comunicazione (un socket)
     e restituisce una risorsa di tipo socket. In una tipica connessione di rete
     si hanno 2 sockets, uno con il ruolo di client
     e l&#039;altro con il ruolo di server.
    </p>
    <p class="para">
     Il parametro <code class="parameter">dominio</code> indica il dominio (famiglia di 
     protocolli da usarsi per la comunicazione tra i sockets). 
    </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. TCP e UDP sono i protocolli
         più comuni di questa famiglia.
       </td>
      </tr>

      <tr>
       <td>AF_INET6</td>
       <td>
        Protocolli basati su IPv6. TCP ed UDP sono i protocolli più comuni
        di questa famiglia. Il supporto a questa famiglia è stato aggiunto in PHP 5.0.0.
       </td>
       </tr>

       <tr>
        <td>AF_UNIX</td>
        <td>
         Famiglia di protocolli per le comunicazioni locali. L&#039;alta efficenza
         ed il basso overhead ne fanno una buona forma di IPC (comunicazione inter-processo).
        </td>
       </tr>

      </tbody>
     
    </table>

    <p class="para">
     Il parametro <code class="parameter">tipo</code> indica il tipo di comunicazione
     da usare 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">protocollo</code> indica 
     lo specifico protocollo nel <code class="parameter">dominio</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">
     La funzione restituisce una risorsa di tipo socket se ha successo, oppure <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> in caso di errore. 
     In quest&#039;ultimo caso si può ottenere il codice di errore tramite 
     <span class="function"><a href="function.socket-last-error.php" class="function">socket_last_error()</a></span>. Tale codice può essere
     passato alla funzione <span class="function"><a href="function.socket-strerror.php" class="function">socket_strerror()</a></span>
     per ottenere una descrizione dell&#039;errore.
    </p>
    <blockquote class="note"><p><strong class="note">Nota</strong>:  
     <p class="para"> 
      Se si forniscono valori non validi per 
      <code class="parameter">dominio</code> o <code class="parameter">tipo</code>,
      la funzione <span class="function"><strong>socket_create()</strong></span> imposta i parametri
      rispettivamente a <strong><code><a href="sockets.constants.php#constant.af-inet">AF_INET</a></code></strong> e <strong><code><a href="sockets.constants.php#constant.sock-stream">SOCK_STREAM</a></code></strong>
      ed emette un messaggio di tipo <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>.
     </p> 
    </p></blockquote> 
    <p class="para">
     Vedere anche
     <span class="function"><a href="function.socket-accept.php" class="function">socket_accept()</a></span>,
     <span class="function"><a href="function.socket-bind.php" class="function">socket_bind()</a></span>,
     <span class="function"><a href="function.socket-connect.php" class="function">socket_connect()</a></span>,
     <span class="function"><a href="function.socket-listen.php" class="function">socket_listen()</a></span>,
     <span class="function"><a href="function.socket-last-error.php" class="function">socket_last_error()</a></span> e
     <span class="function"><a href="function.socket-strerror.php" class="function">socket_strerror()</a></span>.
    </p>
   </div>

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