setsockopt 设置 SO_LINGER 选项

此选项指定函数close对面向连接的协议如何操作(如TCP)。内核缺省close操作是立即返回,如果有数据残留在套接口缓冲区中则系统将试着将这些数据发送给对方。

SO_LINGER选项用来改变此缺省设置。使用如下结构:

struct linger {

int l_onoff; /* 0 = off, nozero = on */

int l_linger; /* linger time */

};

有下列三种情况:

1、设置 l_onoff为0,则该选项关闭,l_linger的值被忽略,等于内核缺省情况,close调用会立即返回给调用者,如果可能将会传输任何未发送的数据;

2、设置 l_onoff为非0,l_linger为0,则套接口关闭时TCP夭折连接,TCP将丢弃保留在套接口发送缓冲区中的任何数据并发送一个RST给对方,而不是通常的四分组终止序列,这避免了TIME_WAIT状态;

3、设置 l_onoff 为非0,l_linger为非0,当套接口关闭时内核将拖延一段时间(由l_linger决定)。如果套接口缓冲区中仍残留数据,进程将处于睡眠状态,直 到(a)所有数据发送完且被对方确认,之后进行正常的终止序列(描述字访问计数为0)或(b)延迟时间到。此种情况下,应用程序检查close的返回值是非常重要的,如果在数据发送完并被确认前时间到,close将返回EWOULDBLOCK错误且套接口发送缓冲区中的任何数据都丢失。close的成功返回仅告诉我们发送的数据(和FIN)已由对方TCP确认,它并不能告诉我们对方应用进程是否已读了数据。如果套接口设为非阻塞的,它将不等待close完成。

注释:l_linger的单位依赖于实现: 4.4BSD假设其单位是时钟滴答(百分之一秒),但Posix.1g规定单位为秒。

TCP 底层处理流程图相关推荐

  1. BlockChain:Python一步一步实现(流程最清楚)区块链底层技术流程图(理解一目了然,值得收藏)

    BlockChain:Python一步一步实现(流程最清楚)区块链底层技术流程图(理解一目了然,值得收藏) 导读 基于Python编程,实现一步一步实现(流程最清楚)区块链底层技术流程图,理解一目了然 ...

  2. 【计算机网络】TCP底层设计交互原理

    文章目录 1.TCP底层三次握手详细流程 2.TCP洪水攻击介绍和ss命令浅析 3.Linux服务器TCP洪水攻击入侵案例 4.TCP洪水攻击结果分析和解决方案 5.TCP底层四次挥手详细流程 1.T ...

  3. tcp底层连接过程(c语言)

    在用了多种上位机开发环境,包括mfc.Qt.C#之后,发现它们的API都是对底层协议的(可以说是C语言)的封装,所以了解了底层协议,任意换上位机开发环境都是没问题的. 1.服务器创建套接字socket ...

  4. TCP/UDP工作流程图

     说到socket必须要贴的图: TCP工作流程:  UDP工作流程: 转载于:https://www.cnblogs.com/gkx0731/p/9727050.html

  5. 面试:TCP协议经典十五连问!

    以下文章来源方志朋的博客,回复"666"获面试宝典 前言 TCP协议是大厂面试必问的知识点.整理了15道非常经典的TCP面试题,希望大家都找到理想的offer呀 1.  讲下TCP ...

  6. Linux 网络 tcp C/S通信模型

    C/S模型就是server 与 client 的模型 TCP服务器模型流程图                                                              ...

  7. Netty详解(五):Netty TCP粘包 拆包

    1. 概述 无论是服务端还是客户端,我们读取或者发送消息的时候,都需要考虑TCP底层的粘包和拆包机制.下面我们来通过Netty来详解TCP底层的粘包和拆包机制. 2. TCP底层的粘包和拆包机制 TC ...

  8. TCP三次握手(建立连接)/四次挥手(关闭连接)

    相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试, ...

  9. Netty(二)——TCP粘包/拆包

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7814644.html 前面讲到:Netty(一)--Netty入门程序 主要内容: TCP粘包/拆包的基础知 ...

最新文章

  1. [luogu2576 SCOI2010] 幸运数字 (容斥原理)
  2. 华为安卓11是鸿蒙系统吗,恭喜华为手机,EMUI11曝光,是披着Android 11的“鸿蒙系统”?...
  3. JS中的(IIFE)(立即调用函数)
  4. Flume监听端口,输出端口数据案例
  5. Bootstrap研究1-精巧的网格布局系统
  6. (44)FPGA面试题CMOS和TTL电路区别
  7. pytorch tensor的数据类型
  8. python 代理抓包_python requests代理设置,fiddler抓包
  9. QQ for linux(ubuntu) 下载安装教程
  10. 带你认识PLC输入的源型与漏型接法
  11. c语言 电阻器的分类,电阻器的分类
  12. 6.1 阈值处理-- threshold函数
  13. 在Flex/Flash项目中使用TLF(Text Layout Framework)的经验分享
  14. OC中类目(Catagory)和扩展(Extension)的使用
  15. vue使用XSLX,用CDN引入后下载的excel文件无法打开的解决办法
  16. recycleview获取第一个和最后一个可见item的位置
  17. Maven的安装配置及IDEA配置(图文教程)
  18. 全藏字【藏文字】的生成算法设计
  19. Python爬取多页糗事百科
  20. Influx 产品常见问题及使用技巧(2)

热门文章

  1. 标准交换机和分布式交换机区别
  2. 女神节礼物送什么好?女神节送女生的礼物推荐
  3. JAVA求班级男女生比例_java编程:给你一个班级的名单,随机分成6个组的问题解决办法...
  4. 如何把图片转化成excel表格?
  5. 养成类游戏——动物餐厅开发制作
  6. 头盔-看完就不会买错的VR头盔攻略:VR头盔到底选哪个?
  7. JS实现Excel表格数据的导出
  8. 告别繁琐界面,酷我音乐带你轻松HiFi
  9. 【MATLAB】改变坐标轴范围
  10. ios中的KVC和KVO