shutdown vs close

shutdown 和 close关闭tcp连接的介绍网上有很多,主要区别如下:

1、调用close后,将中止通信、删除套接字、丢弃数据。但是,注意喽,但是,如果有多个进程共享一个套接字,close每被调用一次,计数减1,直到计数为0时,也就是所用进程都调用了close,套接字将被释放

2、close 关闭了自身数据传输的两个方向(当引用数为0)。

3、shutdown可直接关闭描述符,不考虑描述符的引用数,可选择中止一个方向的连接。

但当调用close或者shutdown时在系统底层发生了什么了?

经过google和测试得出结论如下:

1、调用close(引用数为0),tcp协议栈发送fin消息给对端;

2、调用shutdown(fd, SHUT_RDWR)同close,但不计多个进程引用数,直接关闭;

3、调用shutdown(fd, SHUT_RD), 使阻塞的read(fd,)立刻返回0;不发送fin消息;

如下图所示:每read一次sleep(1); 10s后对端发送消息,还是可以读到的,只是不是使read阻塞。

4、调用shutdown(fd, SHUT_WR),发送fin消息给对端,但仍可接收对端消息;

http://bbs.chinaunix.net/thread-2178020-1-1.html

http://stackoverflow.com/questions/740817/behavior-of-shutdownsock-shut-rd-with-tcp

http://stackoverflow.com/questions/4160347/close-vs-shutdown-socket

时间: 2024-10-08 02:25:47

shutdown vs close的相关文章

Linux系统下的shutdown命令用于安全的关闭/重启计算机

Linux系统下的shutdown命令用于安全的关闭/重启计算机,它不仅可以方便的实现定时关机,还可以由用户决定关机时的相关参数.在执行shutdown命令时,系统会给每个终端(用户)发送一条屏显,提示关机操作.定时关机只需要一个简单的参数,既可以是倒计时,也可以是确切的时间. 命令格式 1 shutdown [选项] [时间] [消息] 并有如下选项: - k 不执行任何关机操作,只发出警告信息给所有用户 - r 重新启动计算机 - h 关机并彻底断电 - f 快速关机且重启动时跳过fsck

shutdown immediate时 hang住 (转载)

shutdown immediate 经常关库时hang住,在alert中有 License high water mark = 4All dispatchers and shared servers shutdown 多等一会会出现SHUTDOWN: Active processes prevent shutdown operation 造成这个现象的原因是(也可能是em的原因,这篇与em无关): 之前的session没有断开,而后又使用了host切换到OS提示符下,导致数据库无法正常关闭 [

Linux终端切换和ls、cd、date、shutdown相关命令

控制台终端:tty1-tty6 虚拟终端:pts 控制台切换快捷键:ctrl +(shift) +alt + F2-F6(有些笔记本需加Fn) 切换到其它终端:Alt + F1-F6 +(Fn) 可通过过滤命令查看打开的终端:ps aux | grep pts ps aux | grep tty 打开新的终端:Ctrl+shift+T 终端切换:Alt+数字键 关闭所有终端:Alt + F4 将终端字体放大:Ctrl+shift+(+号) 将终端字体缩小:Ctrl+(-号) ls命令 ls 目录

Tomcat+Spring+Quartz Restart or shutdown error

环境描述 Intellij Idea 14.1.7 Tomcat 6.0.48 Spring 2.5.6.SEC01 Quartz 1.8.5 问题描述 在 Intellij Idea 中首次可以正常启动 Tomcat 和 Web 应用,但是在 Intellij Idea 中执行重启的时候,控制台中就会包以下的错误,导致无法正常重启或者关闭,必须要启动任务管理器, 强制杀调 java.exe 进程才行. 严重: The web application [] appears to have sta

linux网络编程之shutdown() 与 close()函数详解

linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这个函数会关闭所有和A相关的套接字,包括复制的:而close能直接关闭套接字. 1.close()函数 [cpp] view plain copy print? <span style="font-size:13px;">#include<unistd.h> int 

&lt;BEA-000388&gt; &lt;JVM called WLS shutdown hook. The server will force shutdown now&gt;

在生产weblogic部署环境,发现weblogic每隔几个小时就shutdown一次,经过跟踪发现既不是内存问题,也不是数据库连接池问题,更不是访问量过大引起. 查询相关日志,只有以下几句shutdown的日志: <BEA-000388> <JVM called WLS shutdown hook. The server will force shutdown now> <BEA-000396> <Server shutdown has been request

Linux socket shutdown()和close()

int close(int sockfd) #include<unistd.h>将套接字标记为关闭,尝试发送已经排队的数据,将套接字描述符减一,如果描述符为0则发送FIN触发套接字关闭 int shutdown(int sockfd,int how) #include <sys/socket.h>SHUT_RD代表关闭发送通道,还会尝试发送已经排队的数据,然后发送FINSHUT_WR代表关闭接收通道,如果接收到回复RSTSHUT_RDWR代表同时关闭发送结束通道shutdown只会

No shutdown animation in the electricity display only 1%

低电量自动关机时无关机动画 低电量自动关机时无关机动画1. 问题描述2. 分析3. solution4. 总结 1. 问题描述 DEFECT DESCRIPTION: No shutdown animation in the electricity display only 1%. REPRODUCING PROCEDURES: 电量消耗显示只有1%时,手机突然黑屏关机,没有关机动画,长按power键后手机又可以正常开机使用.(黑屏关机后插上充电器,电量显示为1%) EXPECTED BEHAV

kafka shutdown停止关闭很慢问题的解决方案

kafka shutdown停止很慢问题 在数据量大的时候,consumer一次抓取数据的数据很多,进入到业务处理的数据可能有很多, 假设一次poll有1万条数据进入业务程序,而且业务程序是和poll绑定在一起线程同步执行的,假设平均每条数据,执行业务程序花费100ms, 那么poll一次的数据,至少要执行 1w*0.1s = 1000s = 16.67分钟. 所以,在数据量大的时候,停止一个线程(需要先等待业务程序处理完数据),可能要十几分钟. shutdown问题解决方案 1.改成异步处理数

探究platform_driver中的shutdown用途

http://blog.csdn.net/moxiaomomo/article/details/7897943 "quiesce" 说的也不太明确,我的猜测是:比如系统中有一个大功率的设备,在"软关机"的时候,会调用这个函数,可以在这个函数中切断这个设备的电源,从而省电.因为软关机后,机器本身是还有电的,并没有拔电源. shutdown: 彻底关电 suspend:休眠,可能是低功耗状态 resume:唤醒 --