O que e onde está o arquivo por cada soquete?
"Tudo" é um exagero. Não é uma política rígida, é apenas uma prática comum usar o sistema de arquivos para interfaces, pois o acesso ao sistema de arquivos é sinônimo de chamadas do sistema (ou seja, o sistema de arquivos é realmente uma interface com o kernel e, portanto, fornece um formato conveniente para todos os tipos de coisas) . Outros sistemas operacionais não fazem tanto uso disso, por isso é considerado um recurso distintivo.
Como menciona Hauke Laging, os soquetes "unix local" têm um nó de arquivo, assim como pipes nomeados (consulte man fifo
). No entanto, soquetes de protocolo da Internet (usados para comunicação em rede) não. Em vez disso, eles são associados no espaço do usuário a 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 dessa maneira 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 de arquivos numéricos separados .
Portanto, nesse sentido, todos os soquetes são muito parecidos com arquivos e têm um link /proc/[pid]/fd/
. Você pode até chamar readlink()
esse inode e obter um tipo especial de nome de arquivo, que é usado nas ferramentas de linha de comando, como lsof
eu acredito; da mesma forma, você pode obter informações sobre o descritor de soquete via fstat()
.