Os soquetes Unix são um soquete bidirecional - assim como um soquete baseado em IP, com o qual você provavelmente está familiarizado, e semelhante a um pipe, com o qual você provavelmente está familiarizado.
Eles têm um pequeno conjunto de propriedades interessantes:
- Eles estão apenas no domínio "host local" - você não pode acessá-los pela rede, apenas na máquina local.
- Você pode criá-los no modo "fluxo", onde eles apenas passam dados como um pipe como um fluxo de bytes.
- Você pode criá-los no modo "datagrama", onde eles mantêm os limites entre as operações de envio. Isso permite que você mantenha o enquadramento sem criar seu próprio protocolo de enquadramento sobre um fluxo de bytes.
- Eles usam o sistema de arquivos, ou no Linux, um "espaço de nome abstrato", como seu "endereço"
- Você pode representar a outra extremidade, identificar com segurança o software de conexão ou passar identificadores de arquivo pelo soquete, dependendo do seu sistema operacional.
Essencialmente, eles são equivalentes a qualquer outro soquete - eles têm propriedades um pouco mais interessantes que os tubos, mas não são radicalmente diferentes. Eles geralmente têm maior latência de IPC do que um pipe e buffers geralmente maiores - embora você possa ajustar isso e isso depende da plataforma.
A propriedade final interessante a ser lembrada é que eles usam o sistema de arquivos como seu espaço para nome - assim como um canal nomeado, em vez de um canal anônimo, no qual o software sem relacionamento anterior pode se comunicar. (Soquetes de espaço para nome abstratos são os mesmos, mas o caminho "arquivo" não precisa existir.)
Não há nada mais profundo do que isso - eles não têm nenhuma propriedade oculta super secreta que os torne radicalmente diferentes de um pipe típico ou de uma conexão TCP com o host local.