È da questa risposta:
https://stackoverflow.com/questions/2482411/is-this-pdo-bug-fixed-now/2482424#2482424
È da questa risposta:
https://stackoverflow.com/questions/2482411/is-this-pdo-bug-fixed-now/2482424#2482424
Risposte:
Un socket UNIX è un meccanismo di comunicazione tra processi che consente lo scambio di dati bidirezionale tra processi in esecuzione sulla stessa macchina.
I socket IP (in particolare i socket TCP / IP) sono un meccanismo che consente la comunicazione tra i processi sulla rete. In alcuni casi, è possibile utilizzare i socket TCP / IP per comunicare con i processi in esecuzione sullo stesso computer (utilizzando l'interfaccia di loopback).
I socket di dominio UNIX sanno che stanno eseguendo sullo stesso sistema, quindi possono evitare alcuni controlli e operazioni (come il routing); che li rende più veloci e leggeri delle prese IP. Quindi, se prevedi di comunicare con i processi sullo stesso host, questa è un'opzione migliore rispetto ai socket IP.
Modifica: secondo il commento di Nils Toedtmann : i socket di dominio UNIX sono soggetti alle autorizzazioni del file system, mentre i socket TCP possono essere controllati solo a livello di filtro pacchetti.
È possibile elencare i socket unix locali della propria macchina con il comando seguente:
netstat -a -p --unix
Divertiti!
netstat
funziona comunque su Windows.
Qual è la differenza tra socket Unix e socket TCP / IP?
Un socket TCP / IP viene utilizzato per la comunicazione attraverso le reti TCP / IP. Un socket TCP collegato è identificato dalla combinazione di IP locale, porta locale, IP remoto e porta remota. Un socket TCP in ascolto è identificato dalla porta locale e possibilmente dall'IP locale. AIUI almeno sui socket TCP / IP di Linux comporta sempre la generazione e la decodifica dei pacchetti TCP / IP, anche se il client e il server si trovano sulla stessa macchina.
Un socket di dominio unix (a volte abbreviato in unix socket) d'altra parte funziona su un singolo computer. I socket di ascolto vivono nella gerarchia del filesystem e l'accesso ad essi può essere controllato dalle autorizzazioni del filesystem.
Inoltre, un processo che accetta una connessione su un socket Unix può determinare l'ID utente del processo che si connette. Ciò può evitare la necessità di un passaggio di autenticazione. Invece di generare una password per il tuo server di database e includerne una copia nel codice del tuo webapp puoi semplicemente dire al server di database che l'utente che esegue il webapp ha accesso al corrispondente account utente nel database.
I socket TCP sono gestiti anche da Unix?
Ovviamente
I socket TCP fanno parte delle specifiche del protocollo TCP
Le specifiche del protocollo Internet tendono solo a riguardare ciò che accade sul cavo, la specifica TCP contiene una definizione di Socket ma tale definizione non è la stessa di come il termine viene utilizzato da "API socket".
L '"API socket", come sappiamo, è stata introdotta da BSD ma è stata successivamente copiata dappertutto ed è inclusa come parte dello standard posix. Le cose di base per i socket TCP e UDP tendono ad essere più o meno le stesse su piattaforme diverse ma le cose più avanzate che interagiscono con altre parti del sistema operativo variano, ad esempio su sistemi unix-like un socket è identificato da un handle di file e può essere letto / scritto dalle API dei file, questo non è il caso su Windows.
Alcune estensioni all'API socket sono state documentate in rfcs ma tali RFC sono solo "informativi".
o qualsiasi protocollo potrebbe utilizzare socket IP?
Quando un'applicazione crea esplicitamente un socket utilizzando la funzione "socket" (i socket vengono creati anche dalla funzione accept) passa tre parametri, "domain", "type" e "protocol". Tra questi tre parametri possono essere utilizzati per selezionare molti diversi tipi di socket.