当前位置:网站首页>SOCKET【5】- struct linger 用法

SOCKET【5】- struct linger 用法

2022-06-11 07:44:00 大城市的小蜗牛


前言

Linux下tcp链接断开的时候调用close()函数,有优雅的断开和强制断开两种方式。


一、如何设置断开连接的方式呢

通过设置socket描述符一个linger结构体属性
linger结构体数据结构如下:

#include <arpa/inet.h>
struct linger{
    
	int l_onoff;
	int l_linger;
};

二、三种断开方式

  1. l_onoff=0;l_linger忽略
    close立即返回,底层会将未发送完的数据发送完后再释放资源,即优雅的退出
  2. l_onoff !=0;l_linger = 0
    close()立刻返回,但不会发送未发送完的数据,而是通过REST包强制关闭socket描述符,即强制退出
  3. l_onoff !=0;l_linger > 0
    close不会立刻返回,内核会延时一段时间,这个时间就由l_linger的值来决定。如果超时时间到达之前,发送完未发送的数据(包括FIN包)并得到另一端的确认,close()会返回正确,socket描述符优雅性退出。否则,close()会直接返回错误值,未发送数据丢失,socket描述符被强制性退出。需要注意的是,如果socket描述符被设置未非阻塞型,则close()会直接返回值。

三、具体用法

struct linger ling = {
    0, 0};
setsockopt(socketfd, SOL_SOCKET, SO_LINGER, (void*)&ling, sizeof(ling));

在这里插入图片描述
网络编程4-socket通信三次握手四次挥手

原网站

版权声明
本文为[大城市的小蜗牛]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_46535940/article/details/125196919