UTILIZE A PESQUISA!

Unix Socket

Em sistemas Unix e também já disponível no Windows 10, temos um mecanismo para a comunicação entre processos que estão no mesmo host (ao invés da rede), chamado de Unix Socket. A diferença entre um Unix Socket (IPC Socket) de um TCP/IP Socket é que o primeiro permite a comunicação entre processos que estão na mesma máquina. Já o segundo, além disso, permite a comunicação entre processos através da rede.


 

No entanto, um TCP/IP Socket também pode ser usado para a comunicação de processos que estão na mesma máquina através do loopback que é uma interface virtual de rede que permite que um cliente e um servidor no mesmo host se comuniquem (em IPv4 através do IP 127.0.0.0).

A particularidade é que Unix Sockets estão sujeitos às permissões do sistema e costumam ser um pouco mais performáticos, pois não precisam realizar algumas checagens e operações, por exemplo, de roteamento, algo que acontece com os TCP/IP Sockets. Ou seja, se os processos estão na mesma máquina, Unix Sockets podem ser a melhor opção, mas se estiverem distribuídos na rede, os TCP/IP Sockets são a escolha certa.

Se você tem acesso a algum servidor baseado em Unix, execute netstat -a -p --unix que ele listará todos os Unix Sockets abertos no sistema operacional (bem como mostrará outras informações como o tipo do Socket, caminho etc). Se você quiser visualizar tanto os TCP/IP Sockets quanto os Unix Sockets, você pode executar netstat -na, ele exibirá duas tabelas listando todos os sockets abertos:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:9070          0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:9072          0.0.0.0:*               LISTEN

...

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    26007836 /run/user/1000/systemd/notify
unix  2      [ ACC ]     SEQPACKET  LISTENING     1976     /run/udev/control

...

Existem quatro tipos de sockets: Stream Sockets, Datagram Sockets, Raw Sockets e Sequenced Packet Sockets sendo que os dois primeiros são os mais comuns e utilizados.

  • Stream Sockets (SOCK_STREAM): Esse tipo usa TCP, portanto, todas as características enumeradas anteriormente se aplicam a ele: garantia de entrega e ordem, orientado à conexão etc;
  • Datagram Sockets (SOCK_DGRAM): Esse tipo usa UDP, portanto, não é orientado à conexão, não garante entrega completa dos dados e exige um controle mais especial do desenvolvedor.

Concluindo

Sockets estão presentes em quase tudo o que fazemos na internet, naquele jogo multiplayer que você joga, naquele chat que você iniciou online e muito mais. As linguagens de programação (ou extensões delas) abstraem grande parte da programação com sockets

Para saber mais sobre os Sockets, não deixe de ler o nosso artigo:  Conhecendo os Sockets