close和shutdown以及SO_LINGER的联系

Arnold Denoise流程 参考:https://support.solidangle.com/display/ARP/Removing+Noise+Workflow Arnold生来不是一个以单帧渲染速度见长的渲染器,但这并不能作为一个简单场景渲染时间长达几个小时的借口。 个人认为高品质生产级渲染结果中,Unbiased renderer在渲染时最耗计算时间的其实就是降噪,以至于降噪专门成了一门灯光师必备的技术 阅读详情

以下有部分摘自《unix网络编程》

clsoe将描述字的访问计数器减1,仅在此计数为0的时候才,激发TCP的正常连接终止序列,并且关闭套接口。

用shutdown我们可以激发TCP的正常连接终止序列,而不管访问计数。


而close的操作依赖于套接口选项SO_LINGER的值,具体如下:

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完 成。



OceanBase数据库:与MySQL和Oracle的函数差异分析 OceanBase数据库兼容性解析:MySQL与Oracle模式深度比较 摘要:OceanBase通过独特的双模式架构,实现了对MySQL和Oracle的高度兼容。文章首先分析了OceanBase的兼容性架构,包括SQL解析层、优化器层和执行引擎层的差异化设计。随后对比了两种模式在数据类型、SQL语法、函数支持等方面的兼容性差异,其中MySQL模式兼容5.7版本大部分功能,Oracle模式则支持155个内置函数和PL/SQL特性。最后提出了模式选择的六大考量因素,包括现有系统基础、功能需求和迁移成本等,为数 阅读详情

相关推荐

震坤行:企业 MRO 物料标准化革新之路

那产生这些问题的原因是什么呢?要想解决此问题,企业高层必须下定决心对历史数据进行梳理,并善于利用信息技术,融合企业管理的流程机制,建立起一套适合企业发展的物料标准化管理体系,循序渐进,逐步规避由物料不规范带来的管理问题,最终使得这套标准化体系能够满足企业多元化业务发展需要。国内某电子制造头部企业原先内部物料无对应分类,仅有物料编码,给企业对采购、领料的过程中造成极大的不变,基于震坤行的目录结构,预测物料对应的分类,预测准确率达到80%以上,再辅以人工校正,最终搭建起一套标准的目录体系,如图2.2所示。

carson99的博客 420

国庆弯道超车(手写Muduo库剖析核心代码及编程思想)

Muduo库是陈硕老师个人编写的TCP网络编程库。博主出于学习的目的使用了C++11将陈硕老师的muduo库重构了一下,当然只是重构了其核心的思想。muduo库当中还有很多牛逼的实现个人现在能力有限只能看懂其主要的实现,后面能力提升了再写博客进行剖析。同时这篇博客的目的主要是为了剖析muduo库的核心代码梳理其代码的执行逻辑。这个了博主能力有限,可能写着写着就写出来了一些不知所云的东西,还请各位担待。如果有写错的地方请在下方留言指正。

qq_56999918的博客 2539

告别踩坑!S32K3xx芯片上RTD-SDK的DFLASH与FEE模块配置全流程(基于S32DS)

本文详细解析了在NXP S32K3xx系列MCU上配置RTD-SDK的DFLASH与FEE模块的全流程,基于S32DS开发环境。从Cache配置、Mem_43_InFls模块设置到MemAcc模块的三种调用模式,提供了实战代码示例和常见问题排查表,帮助开发者高效完成存储管理配置,避免常见错误。

weixin_42653691的博客 268

socket选项之SO_LINGER,优雅关闭套接字

本文章详细介绍如何优雅关闭套接字和套接字SO_LINGER选项如何使用,花5分钟时间可以轻松学懂。

weixin_28673511的博客 3213

基于aarch64分析kernel源码 六:kernel_init进程(1号进程)、kthreadd进程(2号进程)

kernel_init进程(1号进程)、kthreadd进程(2号进程)分析

OnlyLove_的博客 763

Zabbix安装与部署 系统环境:centos7.0

Zabbix安装与部署 系统环境:centos7.0

weixin_42485027的博客 2599

SO_LINGER 选项 与 shutdown 函数

SO_LINGER 选项用来指明关闭基于连接的 socket 时的行为。默认,close 函数会立即返回,但当 socket 发送缓冲区残留数据时,close 函数向缓冲区中写入 FIN 后,同样会立即返回,但 TCP 将会尽力发送完这些数据。 <img title="UNPv1笔记10 -- so_linger 选项 与 shutdown 函数 - 我爱美女 - wangzws home"

cjsycyl的专栏 1086

现代 AI Agent 编排技术全景(1)—— 分类体系与四大技术维度

本文介绍基于 LLM 的现代 Agent 分类体系与四大技术维度,形成能够刻画不同 Agent 产品架构特征的分类法

佚失的诗篇 231

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

<br /><br />以下描述主要是针对windows平台下的TCP socket而言。<br />首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包(FIN,RST等),具体的交换过程可以看TCP协议,这里不详细描述了。而关闭socket是指关闭用户应用程序中的socket句柄,释放相关资源。但是当用户关闭socket句柄时会隐含的触发TCP连接的关闭过程。<br />TCP连接的关闭过程有两种,一种是优雅关闭(gracef

1万+

张量分解浅谈(四 Tucker 分解)

学完了SVD算法之后,我们继续回到张量几大分解的学习上来,本期学习的主要内容是张量的 Tucker 分解 以及 前面的CP分解还留下一点没有说完,正好一并补齐!后面的公式我将采用颜色标记,红色代表必须掌握,蓝色尽量掌握! 在这之前先附一张图,包含了各种运算符号的名称含义,大部分是前面说过或者使用过的: Tensor decomposition一 . Tucker 分解公式介绍和原理二 . 张量的 n-Rank 一 . Tucker 分解公式介绍和原理 我们先来看一张被使用过很多次的Trucker 分解图

欢迎来到 豪哥 的博客 1万+

【架构师面试-缓存与搜索-1】-缓存与缓存置换策略源码实现

1:什么是缓存 缓存:加速数据访问的存储,降低延迟(latency),提升吞吐量(Throughput)的利器。 1:缓存演进历史 1. 查库 2. ConcurrentHashMap 3. LRU 4. Guava Cache 5. 分布式缓存(redis,MemCache) 6. 多级缓存 2:在什么地方加缓存 缓存对于每个开发者来说是相当熟悉了,为了提高程序的性能我们会去加缓存,但是在什么地方加缓存,如何加缓存呢? 举个栗子:假设一个网站,需要提高性能,缓存可以放在浏览器,可以放

chongfa2008的博客 6436

【网络基础-套接字关闭】面试BAT因为close被拒(close与shutdown以及SO_LINGER属性(精讲))

人们的视线总是会指向那些他们有兴趣靠近、试探、寻找或者拥有的东西。---摘自:《人生十二堂课》 当一个TCP连接终止时,需要调用close或者shutdown函数来关闭对应的套接字。那么对于这两个关闭接口,各自适用于什么情况呢,有什么不同呢?以及如何通过套接字属性控制它们产生不同的行为呢? 下面我们就来详细说一说close以及shutdown函数的用法以及它们的区别: close:关闭套...

JianChiBieFei的博客 1099

C/C++基础讲解(四十三)之图形篇之绘制直线、圆、圆弧、 椭圆

程序主要是基于Visual studio 2019进行编译完成了,有兴趣的小伙伴可以自己安装下Visual studio 2019,网上有现成的教程,当然了,如果有问题,也可以和我联系,这里我们主要讲解些源码实例,不多说了,言归正传。 C语言,做为学习其他语言的基础语言,其重要性就不言而喻了.下面我将和大家一起来学习探讨C语言的相关奥秘。 实例1:绘制直线 实例2:绘制圆 实例2:绘制圆弧 实例2:绘制椭圆

hnjzfwy的博客 1234

linux tcp优雅关闭,socket关闭连接与close和shutdown的区别及优雅关闭socket的方法:SO_LINGER...

TCP主动关闭连接appl: close(), --> FIN FIN_WAIT_1 //主动关闭socket方,调用close关闭socket,发FIN--> ACK "TIME_WAIT" -- 2MSL timeout -->CLOSED//TIME_WAIT,防止ACK没有给到对方。注意:close时,如果TCP发送队列中还有数据,那么将会发送RST...

weixin_39662263的博客 1832

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

优雅的关闭连接 --- 使用shutdown和setsockopt(SO_LINGER)实现

优雅关闭:如果发送缓存中还有数据未发出则其发出去,并且收到所有数据的ACK之后,发送FIN包,开始关闭过程。TCP连接线关闭一个方向,此时另外一个方向还是可以正常进行数据传输。 强制关闭:如果缓存中还有数据,则这些数据都将被丢弃,然后发送RST包,直接重置TCP连接。两边都关闭了,服务端处理完的信息没有正常传给客户端。 一、使用shudown优雅的关闭连接 1.1、close()函数: #include <unistd.h> int close(int...

modi000的博客 1589

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

读书笔记: SO_LINGER 选项

SO_LINGER  选项关键字:TCP UDP 发送接收缓冲区  CLOSE, SHUTDOWN 函数close 函数默认处理: FIN 放到发送缓冲区的最后面,立即返回,并且发送完发送缓冲区中的所有数据。如果想改变close的操作,可以设置SO_LINGER选项  具体参考《UNP》 7.4 总结: 设置SO_LINGER 套接口选项后,close的成功返回只是

aobai219的专栏 858

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

tcp的关闭(shutdonw、close、SO_LINGER选项)与 连接断开情形判断

1.close只是减少引用计数,只有当引用计数为0的时候,才发送fin,真正关闭连接 shutdown不同,只要以SHUT_WR/SHUT_RDWR方式调用即发送FIN包 2.对方关闭读,再对其写,写端会收到rst,再写收到sigpipe 3.SO_LINGER对shutdown无影响

le119126的专栏 3514

linux内核中tcp连接的断开处理

我们这次主要来分析相关的两个断开函数close和shotdown以及相关的套接口选项SO_LINGER。这里要注意SO_LINGER对shutdown无任何影响。它只对close起作用。 先来坎SO_LINGER所对应的数据结构: [code="java"]struct linger { ///linger的开关 int l_onoff; /* Linger active *...

但行好事 莫问前程 1146

网络编程中的shutdown和close

1

Jason_Linux 1014

close和shutdown

int close(int sockdf); 行为描述:​ 1、close引发描述符的引用计数减一,当该计数为0时才会关闭套接字。 2、close会终止读和写两个方向的数据传送,其行为受SO_LINGER属性影响。 (1)若不设置SO_LINGER属性或者关闭SO_LINGER属性其默认行为为:终止读和写两个方向的数据传送,套接字发送缓冲区中的数据将被尝试发送到对端,接收缓

lp525110627的博客 347

close和shutdown函数

1 close函数      通常的Unix close函数也用来关闭套接字,并终止TCP连接。      #include      int close(int sockfd);      close将描述符引用计数减1。当该计数减到0时,对TCP套接字而言默认行为是把该套接字标记成已关闭,然后立即返回到调用进程。已关闭套接字不能再由调用进程使用,也就是说它不能再作为read或wr

sturdygrass的专栏 667

close 与 shutdown 《Unix网络编程》

1、close函数 关闭套接口,终止TCP连接。 #include int close(int sockfd); 默认情况下,close会将一个tcp连接终止,立即返回到调用进程。不能在这个套接口上面进行read和write。但是,若该套接口缓冲区已经有一些数据了,TCP将尝试将这些数据发送到对端,发送完毕就是正常的TCP连接终止序列。就是TCP终止的4次握手。 close有一个需要注意

cogbee的专栏 1184

网络编程 ------ 连接关闭(close,shutdown)

close函数和shutdown函数都用于关闭一个四元组标识的连接。接下来简单介绍一下 1)close函数 #include <unistd.h> int close(int sockfd); 返回:成功返回0,出错则返回-1; close的默认行为是将套接字标记成关闭,然后立即返回,此后不能使用此套接字调用read和write函数,调用close后在内核层面会将套接字发送缓冲区里面的数据全部发送到对端,这部分数据确认后然后执行四次挥手。我

qq_43603477的博客 3432

模拟tcp_linux Socket编程之TCP之close/shutdown函数实例详解

close:当套接字的引用计数为0的时候才会引发TCP的四分组连接终止序列;shutdown:不用管套接字的引用计数就激发TCP的正常连接终止序列;这里由一个SO_LINGER套接字选项struct linger {int l_onoff; /* 0 = off, nozero = on */int l_linger; /* linger time,POSIX specifie...

weixin_30696755的博客 346

TCP连接关闭—close和shutdown

原文:http://lib.youkuaiyun.com/article/computernetworks/17264 TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。 为方便阅读,我们可以带着以下5个问题来阅读本文: 1、当socket被多进程或者多线程共享时,关闭连接时有何区别? 2、关连接时,若连接上有来自对端的还未

xiaofei0859的专栏 1526

Unix - close和shutdown函数解析

close和shutdown函数解析shutdown函数close函数 shutdown函数 终止网络连接的常用方法是调用close函数。不过close有两个限制,可以通过使用shutdown函数来避免。 (1)close把描述符的引用计数减1,仅在该计数变为0时才关闭套接字。而使用shutdown可以不管引用计数,就可以激发TCP的正常连接终止序列。 (2)close终止读和写两个方向的数据传输。既然TCP连接是全双工的,有时候我们需要告知对方,我们已经完成了数据发送,即使对端仍有数据要发送给我们。 调用

weixin_43830756的博客 411
上一篇: 打印机驱动PCL与PS的区别
下一篇: 魔兽与现实
taolinke
博客等级 码龄19年 95粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值