优雅的closesocket
继续昨天的问题。
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会直接返回值。
关于TCP的退出暂时了解这些,遇到问题再具体分析解决。
优雅的closesocket相关推荐
- Socket编程中的强制关闭与优雅关闭及相关socket选项
以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...
- shutdown()函数:优雅地断开TCP连接
调用 close()/closesocket() 函数意味着完全断开连接,即不能发送数据也不能接收数据,这种"生硬"的方式有时候会显得不太"优雅". 图1:cl ...
- 优雅地断开TCP连接
调用 close()/closesocket() 函数意味着完全断开连接,即不能发送数据也不能接收数据,这种"生硬"的方式有时候会显得不太"优雅". 图1:cl ...
- 异步socket优雅的关闭-CancelIO和SO_LINGER
我们在利用IOCP(完成端口)进行程序设计的时候,经常要关闭一些不满足条件的套接字.假如我们直接采用closesocket方法进行关闭的话,绑定到IO端口的此套接字的未发送的数据就会丢失,这种情况是我 ...
- SO_LINGER和优雅关闭连接
当调用closesocket关闭套接字时,SO_LINGER将决定系统如何处理残存在套接字发送队列中的数据.处理方式无非两种:丢弃或者将数据继续发送至对端,优雅关闭连接.事实上,SO_LINGER并不 ...
- 如何优雅的在python中暂停死循环?
死循环 有时候在工作中可能会遇到要一直执行某个功能的程序,这时候死循环就派上用途了,python中死循环的具体形式大致如下 while True:run_your_code() 结束死循环 通常我们结 ...
- 如何通过HTTP优雅调用第三方-Feign
Java常用HTTP客户端 Java原生HttpURLConnection Apache HttpClient OkHttp Spring RestTemplate 示例 public interfa ...
- 如何更优雅地对接第三方API
如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/ ...
- java redis管理_优雅时间管理Java轻松做到,想学么?
原标题:优雅时间管理Java轻松做到,想学么? 来源 |http://rrd.me/gCQHp 前言:需求是这样的,在与第三方对接过程中,对方提供了token进行时效性验证,过一段时间token就会失 ...
最新文章
- 多继承中虚基类构造函数的一种调用规则
- LaTEX、 Aurora、 markdown常用数学符号
- 连载:阿里巴巴大数据实践—数据开发平台
- java后端开发教程_【后端开发】详细讲解JAVA中方法重载概念——简单易懂
- 【Microstation】第一章:Microstation三维模型构建概述
- 欢乐纪中B组周五模拟赛【2019.3.8】
- 松原哪家计算机学校好,松原高中学校排名2021最新排名,松原高中排名前十
- python模拟登录淘宝_Python模拟登陆淘宝示例源码
- spring boot初步
- ExtJS视频教程 ExtJS入门到精通教程下载
- Dfinity(ICP)介绍-1
- 自动化专业是计算机相关专业吗,自动化专业属于什么学科门类
- Bettertouchtool Mac破解版(触摸板增强神器)
- 时空数据生成对抗网络研究综述(上)
- 论计算机基础的重要性
- 2018百度之星程序设计大赛 - 资格赛 三原色图 problem 1006
- vue详解(一)概述和基础语法
- java语句翻译_java基础语句翻译
- halcon学习拓展系列—《halcon精髓之坐标系仿射篇》
- IOS 音频的 使用说明
热门文章
- linux集群组建和管理,Redis集群搭建与管理
- android内容协调,理清Android协调布局CoordinatorLayout的摆放位置及特殊属性。
- 计算机应用基础win7.pdf,计算机应用基础WIn7操作题(12页)-原创力文档
- 我是学Java的,为什么要我装JDK
- 【数据结构算法】数据结构思维导图
- iotop命令监控磁盘io
- QT下添加*.qrc(图标Icon、图像)资源
- Qt持久性对象进行序列化
- RelativeLayout设置wrap_content无效
- 【iCore3 双核心板_FPGA】实验二十三:使用JTAG UART终端打印信息