【发布时间】:2011-05-10 01:38:26
【问题描述】:
我正在编写一个简单的程序,它可以与不同的服务器建立多个连接以进行状态检查。所有这些连接都是按需构建的;最多可以同时创建 10 个连接。我不喜欢每个套接字一个线程的想法,所以我将所有这些客户端套接字设为非阻塞,并将它们放入 select() 池中。
效果很好,直到我的客户抱怨目标服务器停止响应时等待时间太长才能得到错误报告。
我检查了论坛中的几个主题。有人建议可以使用 alarm() 信号或在 select() 函数调用中设置超时。但我正在处理多个连接,而不是一个。当一个进程范围的超时信号发生时,我无法区分所有其他连接之间的超时连接。
有没有办法改变系统默认的超时时间?
【问题讨论】:
-
你的意思是connect()超时时间太长,还是你已经连接了,并且经历了很长一段时间没有什么可读的?
-
@Duck:我的问题是 connect() 超时时间太长。我程序中的每个连接都是暂时的;它应该在执行状态检查握手过程后立即断开连接。在我的情况下,无需单独调整 TCP_KEEP_ALIVE 持续时间。