改变solaris网络超时

时间:2011-01-31 08:01:29

标签: windows unix tcp solaris

我需要在Windows上快速超时(连接失败)。但是对于solaris,它的时间要长得多,我怎样才能缩短它? (我正在尝试将一台不存在的机器连接到模拟机器上。)

当我在Windows上执行此时 - >超时 - >好

  

D:> telnet 192.168.23.21 222

     

连接到192.168.23.21 ...无法在端口23上打开与主机的连接:

     

连接失败

     

d产品:>

Windows上的

(目标ip不存在) 然后在大约15秒内命令终止。

然而,当我从 solaris执行此操作时 - >很长的超时 - >对我的遗留代码这样的机器不太好:

  

myuser @ mycomp:〜$ telnet 192.168.23.21 222

     

尝试192.168.23.21 ...

然后该过程不会终止

这对我有重大影响,因为我正在将应用程序从Windows迁移到solaris,我必须能够超时(在我无法更新的遗留代码中),所以我需要在操作系统级别来控制这个超时时间与Windows中的当前时间一样短。 如何在solaris OS中更改此超时?简而言之,正如我在Windows上所做的那样

由于

2 个答案:

答案 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)位。)