(PHP 4 >= 4.1.0, PHP 5)
socket_create — Crea un socket (punto terminale di una comunicazione).
$dominio
, int $tipo
, int $protocollo
)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'altro con il ruolo di server.
Il parametro dominio
indica il dominio (famiglia di
protocolli da usarsi per la comunicazione tra i sockets).
Dominio | Descrizione |
---|---|
AF_INET | Protocollo Internet basato su IPv4. TCP e UDP sono i protocolli più comuni di questa famiglia. |
AF_INET6 | 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. |
AF_UNIX | Famiglia di protocolli per le comunicazioni locali. L'alta efficenza ed il basso overhead ne fanno una buona forma di IPC (comunicazione inter-processo). |
Il parametro tipo
indica il tipo di comunicazione
da usare 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 protocollo
indica
lo specifico protocollo nel dominio
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. |
La funzione restituisce una risorsa di tipo socket se ha successo, oppure FALSE
in caso di errore.
In quest'ultimo caso si può ottenere il codice di errore tramite
socket_last_error(). Tale codice può essere
passato alla funzione socket_strerror()
per ottenere una descrizione dell'errore.
Nota:
Se si forniscono valori non validi per
dominio
otipo
, la funzione socket_create() imposta i parametri rispettivamente aAF_INET
eSOCK_STREAM
ed emette un messaggio di tipoE_WARNING
.
Vedere anche socket_accept(), socket_bind(), socket_connect(), socket_listen(), socket_last_error() e socket_strerror().