Creo que la documentación de Bash es algo engañosa sobre este tema. Mirando el código, incluso volviendo a la versión 2.04 donde se introdujeron las redirecciones de red, /dev/tcp
y /dev/udp
funciona de la siguiente manera:
- en el momento de la compilación, el
configure
script verifica si se admiten varias funciones de red; si es así, si las redirecciones de red están habilitadas (que es el caso por defecto), el código de red interno está integrado;
- en tiempo de ejecución, si el código de red interno está integrado
/dev/tcp
y /dev/udp
(en el formato correcto) se maneja internamente; de lo contrario, se genera una advertencia (“/ dev / (tcp | udp) / host / port no es compatible sin conexión en red”) y Bash intenta abrir la ruta dada en el sistema;
- Si las redirecciones de red están configuradas, no se hace nada especial.
Esto se reduce a:
- Si la redirección de red está habilitada:
- si las redes son compatibles con la plataforma de destino
/dev/tcp
y /dev/udp
siempre se manejarán internamente;
- de lo contrario, Bash advertirá e intentará abrir el archivo "a ciegas"; si el sistema de alguna manera es compatible
/dev/(tcp|udp)/host/port
, se utilizará, de lo contrario con toda probabilidad la redirección fallará;
- si la redirección de red está deshabilitada, no se realiza ningún manejo especial; como anteriormente, si el sistema de alguna manera es compatible
/dev/(tcp|udp)/host/port
, se utilizará, de lo contrario, con toda probabilidad, la redirección fallará.
/dev/tcp
existe en algunos sistemas, pero que yo sepa, ninguno admite la misma abstracción que Bash. En Solaris, /dev/tcp
se usa con la ndd
herramienta para consultar y cambiar la configuración de red. En XTI (vea también Open Group si es miembro), la t_open
función se puede usar /dev/tcp
para abrir una conexión TCP, pero no usa la configuración basada en rutas, hay una estructura de datos separada para especificar el host de destino y puerto (y otros parámetros).
/dev
es un tmpfs en los linux actuales, y estaba en la partición raíz en los más antiguos. Por eso es imposible actualmente. Podría hacerse posible fácilmente con una extensión sysfs o procfs (ambos fs son muy flexibles y similares (en realidad, probablemente nadie sabe por qué no son iguales)), nadie lo hace hoy, pero podría hacerse en alrededor de 100 líneas de código.