继续昨天的问题。

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相关推荐

  1. Socket编程中的强制关闭与优雅关闭及相关socket选项

    以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...

  2. shutdown()函数:优雅地断开TCP连接

    调用 close()/closesocket() 函数意味着完全断开连接,即不能发送数据也不能接收数据,这种"生硬"的方式有时候会显得不太"优雅". 图1:cl ...

  3. 优雅地断开TCP连接

    调用 close()/closesocket() 函数意味着完全断开连接,即不能发送数据也不能接收数据,这种"生硬"的方式有时候会显得不太"优雅". 图1:cl ...

  4. 异步socket优雅的关闭-CancelIO和SO_LINGER

    我们在利用IOCP(完成端口)进行程序设计的时候,经常要关闭一些不满足条件的套接字.假如我们直接采用closesocket方法进行关闭的话,绑定到IO端口的此套接字的未发送的数据就会丢失,这种情况是我 ...

  5. SO_LINGER和优雅关闭连接

    当调用closesocket关闭套接字时,SO_LINGER将决定系统如何处理残存在套接字发送队列中的数据.处理方式无非两种:丢弃或者将数据继续发送至对端,优雅关闭连接.事实上,SO_LINGER并不 ...

  6. 如何优雅的在python中暂停死循环?

    死循环 有时候在工作中可能会遇到要一直执行某个功能的程序,这时候死循环就派上用途了,python中死循环的具体形式大致如下 while True:run_your_code() 结束死循环 通常我们结 ...

  7. 如何通过HTTP优雅调用第三方-Feign

    Java常用HTTP客户端 Java原生HttpURLConnection Apache HttpClient OkHttp Spring RestTemplate 示例 public interfa ...

  8. 如何更优雅地对接第三方API

    如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/ ...

  9. java redis管理_优雅时间管理Java轻松做到,想学么?

    原标题:优雅时间管理Java轻松做到,想学么? 来源 |http://rrd.me/gCQHp 前言:需求是这样的,在与第三方对接过程中,对方提供了token进行时效性验证,过一段时间token就会失 ...

最新文章

  1. 多继承中虚基类构造函数的一种调用规则
  2. LaTEX、 Aurora、 markdown常用数学符号
  3. 连载:阿里巴巴大数据实践—数据开发平台
  4. java后端开发教程_【后端开发】详细讲解JAVA中方法重载概念——简单易懂
  5. 【Microstation】第一章:Microstation三维模型构建概述
  6. 欢乐纪中B组周五模拟赛【2019.3.8】
  7. 松原哪家计算机学校好,松原高中学校排名2021最新排名,松原高中排名前十
  8. python模拟登录淘宝_Python模拟登陆淘宝示例源码
  9. spring boot初步
  10. ExtJS视频教程 ExtJS入门到精通教程下载
  11. Dfinity(ICP)介绍-1
  12. 自动化专业是计算机相关专业吗,自动化专业属于什么学科门类
  13. Bettertouchtool Mac破解版(触摸板增强神器)
  14. 时空数据生成对抗网络研究综述(上)
  15. 论计算机基础的重要性
  16. 2018百度之星程序设计大赛 - 资格赛 三原色图 problem 1006
  17. vue详解(一)概述和基础语法
  18. java语句翻译_java基础语句翻译
  19. halcon学习拓展系列—《halcon精髓之坐标系仿射篇》
  20. IOS 音频的 使用说明

热门文章

  1. linux集群组建和管理,Redis集群搭建与管理
  2. android内容协调,理清Android协调布局CoordinatorLayout的摆放位置及特殊属性。
  3. 计算机应用基础win7.pdf,计算机应用基础WIn7操作题(12页)-原创力文档
  4. 我是学Java的,为什么要我装JDK
  5. 【数据结构算法】数据结构思维导图
  6. iotop命令监控磁盘io
  7. QT下添加*.qrc(图标Icon、图像)资源
  8. Qt持久性对象进行序列化
  9. RelativeLayout设置wrap_content无效
  10. 【iCore3 双核心板_FPGA】实验二十三:使用JTAG UART终端打印信息