首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

问题 此前开发实现了一个手机扫码连接PC,PC端调用手机端证书做签名的功能,最近为了优化通信质量和稳定性,将通信协议由UDP改为TCP,局域网用TCP直连,外网用MQTT做中转,优先使用局域网。...后来才发现,阻塞模式下,TCP的connect超时时间可能为75秒到几分钟。。。坑爹啊,等这么久的吗??...原因 阻塞模式 客户端socket为阻塞模式,connect()会一直阻塞到连接建立或连接失败(超时时间可能为75秒到几分钟) 非阻塞模式 调用connect()后,如果连接不能马上建立则返回-1,并且...connect是否完成(此时可以指定select的超时时间,这个超时时间可以设置为比connect的超时时间短),如果select超时则关闭socket,然后可以尝试创建新的socket重新连接,如果select...解决方案 那么,如果希望超时时间可以自己设置,我们可以这样做: 设置socket为非阻塞模式 connect 判断errno是否为EINPROGRESS select,大于0表示连接成功 设置socket

2.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    RabbitMQ消息超时时间、队列消息超时时间、队列超时时间

    一、为队列设置消息TTL TTL是 Time-To-Live 的缩写,指的是存活时间,RabbitMQ可以为每个队列设置消息的超时时间。 ? 代码中声明如下: ?...只要给队列设置x-message-ttl 参数,就设定了该队列所有消息的存活时间,时间单位是毫秒,值必须大于等于0 RabbitMQ保证死消息(在队列中的时间超过设定的TTL时间)不会被消费者获得,同时会尽快删除死的消费者...重新入队(例如被取消确认或者信道关闭或拒绝并重新入队)的消息的过期时间保留初始值,即不刷新过期时间。 二、为单条消息设置TTLTTL 也可以为单条消息设置消息存活时间。 1....向队列中添加110条消息,前10条为没有超时时间的消息,后100条为设置了超时时间的消息 ? 证明:如果队头为没有设置超时时间的消息,即使后面消息已经超时也不会被移除队列。...三、设置队列的TTL(队列超时时间)TTL ? 编程时设置方式 ?

    7.6K20

    TCP长链接介绍

    1.定义 TCP连接以后不主动断开连接.区别于短链接(三次握手四次分手算一次短链接),优点是避免短时间内重复连接所造成的信道资源以及网络资源的浪费 2.长连接断开的原因 进程被杀死 NAT超时 网络状态发生变化...但是这么做有个弊端:破坏了IP的端到端通信 为了维持这种映射关系必然需要一张映射表,在会话静默的这段时间,NAT网关会进行老化操作(节省资源),那么TCP连接很有可能断开,这就和长链接冲突 3.维持长链接方法...心跳保活 (注意,心跳机制和轮询机制还是有区别的.心跳机制是在一个TCP连接上进行的,轮询是每隔一段时间进行一次TCP请求) 心跳机制的理论方案 ?...poll掉) /** * 每发送一次tcp请求,NativeClient都会处理,并且从callbackPool中移除,如果没移除,要么还没处理到,要么超时...* 所以每次从callbackPool取数据,发送时间和当前时间的差只要超过一定时间,就可以认为是超时(30s) */ mResultProcessedThread

    1.4K30

    TCP链接状态转移

    链接建立 TCP链接建立使用'three-way handshake': TCP A TCP B 1....),且收到的TCP数据ACK了一个还没收到的数据,或者数据包含的安全级别或comparement与要求的不符,RST将作为回复,链接状态保持不变 3.假设链接在任何一个同步状态(ESTABLISHED,...状态 TCP链接释放 CLOSE操作意味着后续没有数据要发送了,由于TCP的全双工特性,因此发送CLOSE操作的一方可以继续执行RECEIVE操作,直到对方已经关闭链接,以此来保障TCP链接的优雅关闭。...链接关闭主要有以下3种场景: 1.TCP链接的一方用户主动通过CLOSE操作通知链接关闭 TCP A...(2 MSL) CLOSED 2.TCP从网络中收到FIN消息 TCP收到一个不是通过CLOSE主动发起的FIN消息,这时收到FIN的一方可以ACK这个FIN并告知用户链接正在关闭。

    1.3K30

    【TCP】确认应答、超时重传机制和TCP报头

    超时重传 发生丢包是完全随机,不可预测的,TCP 再怎么厉害,也不可能避免数据发生丢包。...- 发送方发送数据之后,会给出一个“超时时间”,如果在这个时间限制之内,没有收到反馈的 ACK(应答报文 ACK 由 0 变为 1),就视为数据丢包了 图片 不管是因为数据丢了导致的丢包还是因为 ACK...如果发现当前序号 1-1000 这个数据已经在缓冲区中存在了,就会直接把新收到的这个数据丢弃掉 超时时间的设定 这里的时间不是固定不动的,而是动态变化的 发送方第一次重传,超时时间是 t1,如果重传之后...,仍然没有 ACK,就会继续重传,第二次重传的超时时间是 t2,t2>t1 每多重传一次,超时时间的间隔就会变大,重传的频次会降低 经过一次重传之后,就能让数据到达的概率提升很多 反之,如果重传了几次,...(发送方释放掉之前接收方的相关信息,这个连接诶也就没了) 确认应答和超时重传相互补充,共同构建了 TCP 的“可靠传输机制” 可靠传输机制不是靠“三次握手和四次挥手保证的” TCP 报头 首部长度 TCP

    25010

    sqlite 超时时间设置

    在操行写操作时,数据库文件被琐定,此时任何其他读/写操作都被阻塞,如果阻塞超过5秒钟(默认是5秒,能过重新编译sqlite可以修改超时时间),就报”database is locked”错误。...SQLiteException: database is locked异常的解决 - 简书 如何处理 1 默认 5 秒是很长的时间了,找出具体是哪些业务执行会造成超时 5 秒 beets: the SQLite...其它参考 python - OperationalError: database is locked - Stack Overflow 漫谈 SQLite | 张不坏的博客 另一个思路 sqlite 超时时间设置...原文链接: https://blog.jgrass.cc/posts/sqlite-timeout-lock/ 本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明...,且在文章页面明显位置给出原文链接。

    13210

    L009Linux和androidNDK之linux网络通讯超时时间设置

    无论你用任何语言或者是网络库,你都可以设置网络操作的超时时间,特别是connect,read,write的超时时间。 你可以在代码中把超时时间设置任意大小值,但是connect方法会有一点特殊。...connect的超时时间在任意的内核实现上都有一个可以设置的最大值,你的代码中设置的超时值并不能超过这个最大值(即使你设置的值超过这个最大值,其仍然会在最大超时时间后time out)。...然而,在linux系统上,整个syn包发送的事件过程才差不多20几秒。linux系统比bsd类系统重发syn包的时间间隔要密。...linux在20多秒内发送5个syn包(其中包括原始的syn包和后面的重发包),其依次在首包发送的3s,6s,12s,24s后发送。 如果你的程序设置的connect超时时间比20s小,那么没有问题。...4.成功转5 链接超时,或者失败。

    2.1K50

    速读原著-TCPIP(TCP的超时与重传)

    第21章 TCP的超时与重传 21.1 引言 T C P提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。 T C P通过在发送时设置一个定时器来解决这种问题。...对任何实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传的频率。...我们已经看到过两个超时和重传的例子: (1)在6 . 5节的I C M P端口不能到达的例子中,看到T F T P客户使用U D P实现了一个简单的超时和重传机制:假定 5秒是一个适当的时间间隔,并每隔...2MSL定时器测量一个连接处于 T I M E _ WA I T状态的时间。我们在 1 8 . 6节对该状态进行了介绍。 本章以一个简单的 T C P超时和重传的例子开始,然后转向一个更复杂的例子。...可以看到 T C P的典型实现是怎样测量 T C P报文段的往返时间以及 T C P如何使用这些测量结果来为下一个将要传输的报文段建立重传超时时间。

    1K20

    【JavaEE】——TCP应答报文机制,超时重传机制

    TCP传输的特点有:有连接,可靠传输,面向字节流,全双工。...,并非是只要有确认应答机制就可以保证TCP可靠传输。...TCP的可靠传输是因为“进行了三次握手”这一说法是错误的(后续我们会详细解释) 四:超时重传机制 超时重传机制是确认应答的补充 1:发送方丢包 上文有说到,设备间进行通讯的时候需要经过,像路由器和交换机这种中间站...~),迟迟等不到(超时)ack应答报文,发送方就会认为,这次发送的数据报包丢失了没有到达接收方,那么就会重新在发送一遍。...这种情况,此时就很可能不是丢包的问题了,可能是设备的问题,此时设备间就会重新连接,连接失败,就放弃连接了 (2)超时时间动态变化 超时时间会随着重传次数的增加而增大,(因为经历重传之后还丢包的话,大概率是网络的原因

    13110
    领券