首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux中实现connect() API的阻塞等待

如何在Linux中实现connect() API的阻塞等待
EN

Stack Overflow用户
提问于 2012-12-07 19:34:42
回答 3查看 412关注 0票数 1

在我的客户端程序(c++)中,我尝试使用connect() API通过套接字连接服务器。我想假设我的客户端应用程序处于阻塞等待状态(即长时间后返回ETIMEDOUT errno )。但是connect() API只返回成功或失败。它不是在等待。在阻塞等待中,我应该怎么做才能让connect() API。

EN

回答 3

Stack Overflow用户

发布于 2012-12-07 19:50:16

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

如果您要测试是否超时,只需拔下服务器的网线片刻即可。

或者,您自己的机器的网线,但请注意,这也会中断名称解析,您甚至可能无法到达特定的connect

票数 1
EN

Stack Overflow用户

发布于 2012-12-07 19:40:02

这听起来可能前后不同,但将套接字置于非阻塞模式,发出connect(),然后使用超时调用select()。如果select()超时,就会出现连接超时。如果在超时时间内将套接字选择为可写,则再次调用connect()以完成连接,然后将套接字置于阻塞模式并继续执行I/O。当然,每一步都要检查错误。

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

票数 0
EN

Stack Overflow用户

发布于 2012-12-07 19:51:05

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

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13762279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档