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

shutdown vs close的更多相关文章

  1. Tomcat shutdown执行后无法退出进程问题排查及解决

    问题定位及排查 上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事.而且我内心总觉得这可能是tomcat像nginx一 ...

  2. apche启动错误|httpd.pid overwritten — Unclean shutdown of previous Apache run?

    APACHE启动成功,但无法接受任何请求,查看ERROR.LOG文件[warn] pid file /opt/apache/logs/httpd.pid overwritten - Unclean s ...

  3. 登陆Oracle,报oracle initializationg or shutdown in progress 错误提示

    前两天,登陆Oracle,发现登陆不上去了,报”oracle initializationg or shutdown in progress 错误提示” 错误. 然后就想着怎么去解决,首先自己到win ...

  4. init shutdown reboot poweroff halt区别

    init 首先看看LINUX系统几种运行级别# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)# 1 - 单用户模式# 2 - 多用户,没有 NFS# 3 - 完全多用户 ...

  5. 谢欣伦 - 原创软件 - 工具软件 - 快速关机Shutdown

    快速关机Shutdown,含源码. 公司公用的笔记本电脑实在太烂,不知从什么时候开始关机永远都关不了,一直停留在“关闭系统中……”.忍无可忍之下,自己写了一个快速关机程序. 下载: Shutdown_ ...

  6. MongoDB学习系列(3)--解决MongoDB Unexpected Shutdown问题

    晚上准备继续学习PHP+MongoDB,点击Run_MongoDB_Service.bat文件,这个文件是我写的bat文件,就是快速启动MongoDB.但是命令行一闪而过,我很奇怪.昨天晚上写代码还是 ...

  7. Oracle shutdown immediate无法关闭数据库解决方法

    在测试服务器上使用shutdown immediate命令关闭数据库时,长时间无法关闭数据库,如下所示 1: [oracle@DB-Server admin]$ sqlplus / as sysdba ...

  8. Oracle数据库shutdown immediate被hang住的几个原因

    实验操作环境:         操作系统:Red Hat Enterprise Linux ES release 4 (Nahant Update 6)                         ...

  9. Linux命令学习总结:shutdown

    命令简介: 该命令可以安全关闭或者重新启动系统.你没有看错,shutdown命令不仅可以关闭系统.也可以重启Linux系统.   命令语法: /sbin/shutdown [-t sec] [-ark ...

  10. Linux常用命令学习3---(文件的压缩和解压缩命令zip unzip tar、关机和重启命令shutdown reboot……)

    1.压缩和解压缩命令    常用压缩格式:.zip..gz..bz2..tar.gz..tar.bz2..rar .zip格式压缩和解压缩命令        zip 压缩文件名 源文件:压缩文件   ...

随机推荐

  1. zabbix通过简单命令监控elasticsearch集群状态

    简单命令监控elasticsearch集群状态 原理: 使用curl命令模拟访问任意一个es节点可以反馈的集群状态,集群的状态需要为green curl -sXGET http://serverip: ...

  2. 解决报错error the @annotation pointcut expression is only supported at Java 5

    eclipse搭建环境后报错 error the @annotation pointcut expression is only supported at Java 5 错误意思大致是:注释切入点表达 ...

  3. centos配置golang & SVN客户端配置

    环境:centos 6.5 一.下载和解压go环境包 >>cd /usr/local/ >>wget -c http://golangtc.com/static/go/go1. ...

  4. Java 清理和垃圾回收

    java.lang.ref.cleaner包 finalize()//该方法已过时,有风险,慎用 1.对象不可能被垃圾回收 2.垃圾回收并不等于"析构" 只有当垃圾回收发生时fin ...

  5. PHP获取文件大小的方法详解

    对于初入门的PHP新手来说,PHP获取文件大小这个功能实现,或许有一定的难度.但是相信新手小白们在看过本篇文章介绍后,一定能轻松掌握PHP获取文件大小的重要知识! 下面我们通过具体的代码示例,为大家详 ...

  6. JS高级 - 面向对象2(prototype定义)

    定义和用法 prototype 属性允许您向对象添加属性和方法 注意: Prototype 是全局属性,适用于所有的Javascript对象. 语法 object.prototype.name=val ...

  7. AOJ 0189 Convenient Location (Floyd)

    题意: 求某一个办公室 到其他所有办公室的 总距离最短  办公室数 不超过10 输入:多组输入,每组第一行为n (1 ≤ n ≤ 45),接下来n行是 (x, y, d),x到y的距离是d输出:办公室 ...

  8. la 4015

    题解: 烂大街的树形dp?? f[i][j]表示到i点,在i的子树中经过j个,且要返回i点的最小值 g[i][j]表示到i点,在i的子树中经过j个,且不用返回i点的最小值 然后转移做背包就可以了 (注 ...

  9. [解决]IP地址非法,请接入联通热点后重新获取

    在使用联通chinaunicom WLAN上网时,在弹出的登陆界面后输入账号.密码,点登陆,显示IP地址非法,请接入联通热点后重新获取.现在在其他地方看到解决办法连接chinaunicom,弹出登陆界 ...

  10. Codeforces Round #469 (Div. 2)

    Codeforces Round #469 (Div. 2) 难得的下午场,又掉分了.... Problem A: 怎么暴力怎么写. #include<bits/stdc++.h> #de ...