【套接字】struct linger结构体作用详解

struct linger结构体作用详解

TCP连接断开的时候调用closesocket函数,有优雅的断开和强制断开两种方式.

那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。
linger结构体数据结构如下:

   #include <  //linux
  struct linger
  {
    int l_onoff;
    int l_linger;
  };

有三种组合

  • 第一种:l_onoff = 0 && l_linger忽略 【缺省】

这种方式下,就是在closesocket的时候立刻返回,底层会将未发送完的数据发送完成后再释放资源,也就是优雅的退出。

  • 第二种:l_onoff非零 && l_linger = 0;

这种方式下,在调用closesocket的时候同样会立刻返回,但不会发送未发送完成的数据,而是通过一个REST包强制的关闭socket描述符,也就是强制的退出。

  • 第三种:l_onoff非零 && l_linger > 0

这种方式下,在调用closesocket的时候不会立刻返回,内核会延迟一段时间,这个时间就由l_linger得值来决定。如果超时时间到达之前,发送完未发送的数据(包括FIN包)并得到另一端的确认,closesocket会返回正确,socket描述符优雅性退出。否则,closesocket会直接返回错误值,未发送数据丢失,socket描述符被强制性退出。需要注意的时,如果socket描述符被设置为非堵塞型,则closesocket会直接返回值。

Linux下需要包含头文件
————————————————
版权声明:本文为CSDN博主「Franck_LeeMH」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lmh12506/article/details/8237769

你可能感兴趣的:(【套接字】struct linger结构体作用详解)