如何在Linux中阻止等待connect()API

时间:2012-12-07 11:34:42

标签: c linux sockets

在我的客户端程序(c ++)中,我尝试使用connect()API通过套接字连接服务器机器。我想制作一个场景,我的客户端应用程序处于阻塞等待状态(即很长一段时间后返回ETIMEDOUT错误)。但是connect()API仅在成功或失败时返回。它没有等待。我该怎么做才能在阻塞等待中生成connect()API。

3 个答案:

答案 0 :(得分:1)

除非你已经将套接字设置为非阻塞,否则你实际上是阻塞的,只是connect被唤醒得足够快。

如果您想测试超时,只需拔掉服务器的网线短时间。

或者,您自己的计算机的网络电缆,但请注意,这也会破坏名称解析,您甚至可能无法达到特定的connect

答案 1 :(得分:0)

这可能会回到正面,但是将套接字置于非阻塞模式,发出connect(),然后使用超时调用select()。如果select()超时,则表示连接超时。如果在超时内选择套接字为可写,则再次调用connect()以完成连接,然后将套接字置于阻塞模式并继续进行I / O.当然,检查每一步的错误。

请注意,您只能使用此技术来减少大约一分钟的默认超时,而不是增加它;当然,如果你立即得到连接拒绝,就不会有任何等待:你无法改变它。

答案 2 :(得分:-1)

如果您希望遇到connect失败的ETIMEDOUT,您可以创建一个侦听连接但从不接受它们的特殊服务器。当您的客户端连接到该虚拟服务器程序时,它迟早会超时。

当然,这假设您在客户端中创建的套接字是非阻塞的。