Mar*_*tin 4 bash tcp connection-timeout
在下面的命令中,我同时启用文件/dev/tcp/10.10.10.1/80读写功能并将其与文件描述符3关联:
$ time exec 3<>/dev/tcp/10.10.10.1/80
bash: connect: Operation timed out
bash: /dev/tcp/10.10.10.1/80: Operation timed out
real 1m15.151s
user 0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
这将自动尝试执行TCP三向握手。如果如上例所示无法访问10.10.10.1,则connect系统调用将尝试连接75秒钟。这75秒的超时时间是由确定的bash吗?还是该系统默认?最后但并非最不重要的一点是,有没有办法降低此超时值?
如前所述,在Bash中不修改源代码是不可能的,尽管这是使用timeout命令的解决方法,例如:
$ timeout 1 bash -c "</dev/tcp/stackoverflow.com/80" && echo Port open. || echo Port closed.
Port open.
$ timeout 1 bash -c "</dev/tcp/stackoverflow.com/81" && echo Port open. || echo Port closed.
Port closed.
Run Code Online (Sandbox Code Playgroud)
使用此语法,timeout命令将在给定时间后终止进程。
请参阅:timeout --help更多选项。
这是由TCP决定的。可以通过应用程序代码按每个插槽减少它。
注意:只有在完全没有响应的情况下,超时才会生效。如果连接被拒绝,错误会立即发生。