博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ struct linger
阅读量:6637 次
发布时间:2019-06-25

本文共 673 字,大约阅读时间需要 2 分钟。

hot3.png

TCP连接断开的时候调用closesocket函数,有优雅的断开和强制断开两种方式.
那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger 属性。
linger 如下:
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下需要包含头文件<arpa/inet.h>

转载于:https://my.oschina.net/winHerson/blog/181903

你可能感兴趣的文章
【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的
查看>>
证书错误 导航已阻止 无法跳转 最终解决
查看>>
Web App 和 Native App,哪个是趋势?
查看>>
spring的@Transactional注解详细用法
查看>>
so静态分析进阶练习——一个CreakeMe的分析思路
查看>>
Java归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目
查看>>
刚踏入职场的程序员(2年以内初级程序员)如何快速踏实地提升自己的能力
查看>>
Vue2.0总结———vue使用过程常见的一些问题
查看>>
vThunder 安装
查看>>
docker 相关文章
查看>>
ES容易忽视的集群配置
查看>>
入门系列之在Nginx配置Gzip
查看>>
Android(4.0.3+): Service, AsyncTask, 定时任务和UI通信
查看>>
团队管理-每日站会,代码审查,结对编程
查看>>
如何在UWP中统一处理不同设备间的页面回退逻辑
查看>>
关于程序的测试
查看>>
SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析
查看>>
一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)
查看>>
LeapMotion Demo1
查看>>
python项目实现配置统一管理的方法
查看>>