当前位置:   article > 正文

深入剖析阻塞式socket的timeout_socket connect timeout

socket connect timeout

前言

         网络编程中超时时间是一个重要但又容易被忽略的问题,对其的设置需要仔细斟酌。

        本文讨论的是socket设置为阻塞模式,如果socket处于阻塞模式运行时,就需要考虑处理socket操作超时的问题。

        所谓阻塞模式,是指其完成指定的操作之前阻塞当前的进程或线程,直到操作有结果返回.
        在我们直接调用socket操作函数时,如果不进行特意声明的话,它们都是工作在阻塞模式的,
         如 connect, send, recv等.

简单分类的话,可以将超时处理分成两类:

连接(connect)超时;
发送(send), 接收(recv)超时; 

连接超时

        从字面上看,连接超时就是在一定时间内还是连接不上目标主机。你所建立的socket连接其实最终都要进行系统调用进入内核态,剩下的就是等待内核通知连接建立。所以自行在代码中设置了超时时间(一般是叫connectTimeout或者socketTimeout),那么这个超时时间一到如果内核还没成功建立连接,那就认为是连接超时了。如果他们没设置超时时间,那么这个connectTimeout就取决于内核什么时候抛出超时异常了。

因此,我们需要分析一下内核是怎么来判断连接超时的。

内核层的超时分析

我们都知道一个连接的建立需要经过3次握手,所以连接超时简单的说是是客户端往服务端发的SYN报文没有得到响应(服务端没有返回ACK报文)。

由于网络本身是不稳定的,丢包是很常见的事情(

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/225177?site
推荐阅读
相关标签
  

闽ICP备14008679号