What and where is file per each socket?
"Tudo" é um exagero. Não é uma política rígida, é uma prática comum usar o sistema de arquivos para interfaces, pois o acesso ao sistema de arquivos é sinônimo de chamadas do sistema (isto é, o sistema de arquivos é realmente uma interface com o kernel e fornece um formato conveniente para todos os tipos de coisas) . Outros sistemas operacionais não fazem tanto uso disso, por isso é considerado uma característica distintiva.
Como menciona Hauke Laging, soquetes "unix local" têm um nó de arquivo, assim como os pipes nomeados (veja man fifo
). No entanto, os soquetes de protocolo da Internet (usados para comunicação de rede) não. Em vez disso, eles estão associados no espaço do usuário com um número de porta. Observe que um soquete de servidor em uma única porta conecta vários clientes, cada um com seu próprio soquete individual (um único arquivo de soquete local unix também pode ser usado com um servidor, ou seja, pode haver vários soquetes associados ao mesmo endereço de arquivo) e no código eles são de fato identificados individualmente através de descritores numéricos separados .
Então, nesse sentido, todos os sockets são muito parecidos com arquivos, e possuem um link em /proc/[pid]/fd/
. Você pode até mesmo chamar readlink()
neste inode e obter um tipo especial de nome de arquivo, que é usado em ferramentas de linha de comando como lsof
, acredito; Da mesma forma, você pode obter informações sobre o descritor de soquete via fstat()
.