I socket Unix sono un socket bidirezionale, proprio come un socket basato su IP, con cui probabilmente hai familiarità, e un po 'come un pipe, che probabilmente conosci.
Hanno un piccolo insieme di proprietà interessanti:
- Sono solo nel dominio "dell'host locale" - non puoi accedervi tramite la rete, solo sul computer locale.
- Puoi crearli in modalità "stream", dove passano semplicemente i dati come una pipe come un flusso di byte.
- Puoi crearli in modalità "datagram", dove mantengono i confini tra le operazioni di invio. Ciò consente di conservare il framing senza creare il proprio protocollo di frammentazione su uno stream di byte.
- Usano il filesystem, o su Linux, un "namespace astratto", come loro "indirizzo"
- Potrebbe essere possibile impersonare l'altro capo, identificare in modo sicuro il software di connessione o passare gli handle del file sul socket, a seconda del sistema operativo.
Essenzialmente, sono l'equivalente di qualsiasi altro socket: hanno proprietà leggermente più interessanti delle pipe, ma non sono radicalmente differenti. Solitamente hanno una latenza IPC più alta rispetto a una pipe, e spesso buffer più grandi, anche se potresti essere in grado di ottimizzarlo, e dipende dalla piattaforma.
L'ultima proprietà interessante da ricordare è che usano il filesystem come loro spazio dei nomi - quindi sono come una named pipe, piuttosto che una pipe anonima, in quel software che nessuna relazione precedente può comunicare. (I socket dello spazio dei nomi astratti sono gli stessi, ma il percorso "file" non deve necessariamente esistere.)
Non c'è nulla di più profondo di quello - non hanno alcuna proprietà nascosta super-secret che li rende radicalmente diversi da una pipe tipica, o una connessione TCP a localhost.