首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

iOS下TCP设置connnect超时时间的坑

问题 此前开发实现了一个手机扫码连接PC,PC端调用手机端证书做签名的功能,最近为了优化通信质量和稳定性,将通信协议由UDP改为TCP,局域网用TCP直连,外网用MQTT做中转,优先使用局域网。...后来才发现,阻塞模式下,TCP的connect超时时间可能为75秒到几分钟。。。坑爹啊,等这么久的吗??...errno设置为EINPROGRESS,表示正在尝试连接(注意连接也可能马上建立成功比如连接本机的服务器进程),此时TCP的三次握手动作在背后继续进行,而程序可以做其他的东西,然后调用select()检测非阻塞...connect是否完成(此时可以指定select的超时时间,这个超时时间可以设置为比connect的超时时间短),如果select超时则关闭socket,然后可以尝试创建新的socket重新连接,如果select...解决方案 那么,如果希望超时时间可以自己设置,我们可以这样做: 设置socket为非阻塞模式 connect 判断errno是否为EINPROGRESS select,大于0表示连接成功 设置socket

2.1K10

设置默认超时和重试是一个基础设施的基本素养

What 本篇应该是稳定性「三十六计」系列的一篇:超时重试。但是「设置默认超时和重试是一个基础设施的基本素养」这句话我在我们组内三次开会的时候都说了。表达了我的一个理念。...Why 为什么一个基础设施要设置默认超时和重试?想象下面一个场景。 TCP协议里有一些基本的概念:MSL、TTL、RTT。...想象这些东西都没有默认值,需要我们自己去设置,是不是很头大? 作为基础设施,自己应该是做过数据统计的、做过压测的。...死锁问题 想象一个分布式锁,没有超时时间。万一释放锁时失败了,其他人永远不能获取这个锁。而如果有超时时间,锁过期后,其他的请求通过重试是可以获取到锁的。 How 怎么设置超时和重试。...其实不管什么语言都不是难事,难的是超时和重试条件是什么,设置多少合理。 超时和重试条件根据业务不同有差异。 一般的超时条件可设置为TP95(95%的请求)的2倍。

48320
领券