我需要在Windows上快速超时(连接失败)。但是对于solaris,它的时间要长得多,我怎样才能缩短它? (我正在尝试将一台不存在的机器连接到模拟机器上。)
当我在Windows上执行此时 - >超时 - >好
Windows上的D:> telnet 192.168.23.21 222
连接到192.168.23.21 ...无法在端口23上打开与主机的连接:
连接失败
d产品:>
(目标ip不存在) 然后在大约15秒内命令终止。
然而,当我从 solaris执行此操作时 - >很长的超时 - >对我的遗留代码这样的机器不太好:
myuser @ mycomp:〜$ telnet 192.168.23.21 222
尝试192.168.23.21 ...
然后该过程不会终止
这对我有重大影响,因为我正在将应用程序从Windows迁移到solaris,我必须能够超时(在我无法更新的遗留代码中),所以我需要在操作系统级别来控制这个超时时间与Windows中的当前时间一样短。 如何在solaris OS中更改此超时?简而言之,正如我在Windows上所做的那样
由于
答案 0 :(得分:2)
如果您必须在系统范围内执行此操作,则可以修改TCP驱动程序参数tcp_ip_abort_cinterval
:
tcp_ip_abort_cinterval - 这是 连接的时间量 允许保持半开状态。这是180,000 (默认为3分钟)。您可以将其更改为25,000 如果你想要(25秒)。请注意,通过更改此 您可能会发现SLIP / PPP用户可能会遇到问题 你的网站。
要查看您当前的设置:
/ usr / sbin / ndd / dev / tcp tcp_ip_abort_cinterval
更改设置:
/ usr / sbin / ndd -set / dev / tcp tcp_ip_abort_cinterval 25000
答案 1 :(得分:0)
也许您可以设置套接字选项SO_SNDTIMEO
- 该链接报告Solaris不尊重该选项,但您可能很幸运,他们现在已经修复了它。 :)
如果套接字选项不起作用,您可以在将来的某个时间点设置alarm(2)
并中断connect(2)
来电。感觉非常糟糕,但这是一种选择。
如果connect(2)
操作成功或未成功,另一个选择是在将来的某个时刻切换到非阻塞套接字操作和轮询。您可以看到select(2)
的超时,并发现它是否有错误或可读/可写。 (另请参阅EINPROGRESS
中的connect(2)
位。)