Descrizione
resource
socket_create ( int 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).
Tabella 1. Famiglie di indirizzi/protocolli disponibili
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.
Tabella 2. Tipi di socket disponibili
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.
Tabella 3. Protocolli comuni
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 o tipo,
la funzione socket_create() imposta i parametri
rispettivamente a AF_INET e SOCK_STREAM
ed emette un messaggio di tipo E_WARNING.
Vedere anche
socket_accept(),
socket_bind(),
socket_connect(),
socket_listen(),
socket_last_error() e
socket_strerror().