¿Qué y dónde está el archivo por cada socket?
"Todo" es una exageración. No es una política estricta, es solo una práctica común usar el sistema de archivos para las interfaces ya que el acceso al sistema de archivos es sinónimo de llamadas al sistema (es decir, el sistema de archivos es realmente una interfaz con el kernel, y por lo tanto proporciona un formato conveniente para todo tipo de cosas) . Otros sistemas operativos no hacen tanto uso de esto, por lo que se considera una característica distintiva.
Como menciona Hauke Laging, los sockets "unix locales" tienen un nodo de archivo al igual que las canalizaciones con nombre (ver man fifo
). Sin embargo, los zócalos de protocolo de Internet (utilizados para la comunicación de red) no lo hacen. En cambio, están asociados en el espacio de usuario con un número de puerto. Tenga en cuenta que un socket de servidor en un solo puerto conecta varios clientes, cada uno con su propio socket individual (también se puede usar un único archivo de socket local de Unix de esta manera con un servidor, lo que significa que puede haber múltiples sockets asociados con la misma dirección de archivo) y en el código, de hecho, se identifican individualmente a través de descriptores numéricos de archivo separados .
Entonces, en ese sentido, todos los sockets son muy parecidos a los archivos y tienen un enlace /proc/[pid]/fd/
. Incluso puede llamar readlink()
a este inodo y obtener un tipo especial de nombre de archivo, que se usa en herramientas de línea de comandos como lsof
, creo; Del mismo modo, puede obtener información sobre el descriptor de socket a través de fstat()
.