TCP连接断开的时候调用close socket函数,已经讨论过有优雅的断开和强制断开,那么如何设置断开连接的方式呢?

是通过设置socket描述符一个linger结构体属性。

linger结构体数据结构如下:

struct linger { int l_onoff; int l_linger; };

有三种组合方式:

第一种

l_onoff = 0;

l_linger忽略

这种方式下,就是在closesocket的时候立刻返回,底层会将未发送完的数据发送完成后再释放资源,也就是优雅的退出.

第二种

l_onoff非零

l_linger = 0;

这种方式下,在调用close socket的时候同样会立刻返回,但不会发送未发送完成的数据,而是通过一个REST包强制的关闭socket描述符,也就是强制的退出。

第三种

l_onoff非零

l_linger > 0

这种方式下,在调用close socket的时候不会立刻返回,内核会延迟一段时间,这个时间就由l_linger得值来决定。如果超时时间到达之前,发送完未发送的数据(包括FIN包)并得到另一端的确认,close socket会返回正确,socket描述符优雅性退出。

否则,close socket会直接返回错误值,未发送数据丢失,socket描述符被强制性退出。

需要注意的时,如果socket描述符被设置为非堵塞型,则close socket会直接返回值。

转载于:https://www.cnblogs.com/springside4/archive/2010/11/11/2481735.html

struct linger相关推荐

  1. struct linger

    Linux下tcp连接断开的时候调用close()函数,有优雅断开和强制断开两种方式. 那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性. linger结构体数据结 ...

  2. struct linger 用法

    http://www.cnblogs.com/caosiyang/archive/2012/03/29/2422956.html Linux下tcp连接断开的时候调用close()函数,有优雅断开和强 ...

  3. Linux下getsockopt/setsockopt 函数说明

    [getsockopt/setsockopt系统调用]       功能描述:         获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套 ...

  4. memcached(二)事件模型源码分析

    在memcachedd中,作者为了专注于缓存的设计,使用了libevent来开发事件模型.memcachedd的时间模型同nginx的类似,拥有一个主进行(master)以及多个工作者线程(woker ...

  5. 硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

    来自:小林coding 每日一句英语学习,每天进步一点点: 前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 T ...

  6. 字选项套接字选项-java教程

    今天一直在研究字选项之类的问题,现在正好有机会和大家分享一下. ================================================  套接字机制供给了两个套接字选项接口来 ...

  7. linux 套接字选项定义

    2019独角兽企业重金招聘Python工程师标准>>> linux 套接字选项定义 2011-07-28 14:31 1.closesocket(一般不会立即关闭而经历TIME_WA ...

  8. Linux下高性能网络编程中的几个TCP/IP选项

    Linux下高性能网络编程中的几个TCP/IP选项 转自:http://blog.chinaunix.net/u/12592/showart.php?id=2064847 最近在新的平台上测试程序,以 ...

  9. 面向连接的Socket Server的简单实现

    一.基本原理 有时候我们需要实现一个公共的模块,需要对多个其他的模块提供服务,最常用的方式就是实现一个Socket Server,接受客户的请求,并返回给客户结果. 这经常涉及到如果管理多个连接及如何 ...

最新文章

  1. u-boot编译过程分析
  2. 抽奖 | 送树莓派PICO开发板、机械键盘、声控鼠标
  3. JVM源码分析之System.currentTimeMillis及nanoTime原理详解
  4. 搭建PHP本地服务器(XAMPP)
  5. Vue Bootstrap OSS 实现文件追加上传、断点续传、极速秒传
  6. ubuntu 16.04 Nginx源码部署安装
  7. JS Date格式化为yyyy-MM-dd类字符串
  8. php图片居中在div,css如何实现图片在div中垂直居中
  9. Shell脚本编程之(七)Shell脚本的追踪与debug
  10. 可恨的KYLIN OS:动不动就不支持老机
  11. 1月23日阴阳师服务器维护,阴阳师1月23日体验服更新 双神降临概率UP
  12. 杰理之录音详细流程框图【篇】
  13. 怎么修改Word每行文字间距
  14. 启发式路径搜索算法介绍
  15. FFmpeg x265安装
  16. 项目初期如何确定项目的进度计划和资源需求?
  17. 安装ps教程,ps软件安装
  18. 计算机图形学2d作业,计算机图形学作业
  19. 机器学习项目是如何开发和部署的?
  20. Gitlab访问突然出现 403 forbidden解决方案

热门文章

  1. javaweb在线问卷系统_2020 最新流行的Java Web报表工具比对
  2. java获取u盘_实例分享java监听u盘的方法
  3. Html跨页面调用函数,一个cshtml如何在另一个cshtml中调用一个函数?
  4. Android 客户端与服务器交互方式
  5. php 获取警告信息,获取PHP警告错误信息的解决方法_PHP教程
  6. 惠普服务器查询ilo信息,Hp服务器iLO IML硬件日志收集与远程巡检
  7. 禅道备份功能_更新禅道燃尽图及数据备份
  8. 如何控制油门更准确?
  9. H.264的码率控制算法
  10. Cookie / Session 的机制与安全