Linux上TCP的shutdown/close

Linux的版本是kernel-2.6.21:

1.只要TCP栈的读缓冲里还有未读取(read)数据,则调用close时会直接向对端发送RST.

2.shutdown与socket描述符没有关系,即使调用shutdown(fd, SHUT_RDWR)也不会关闭fd,最终还需close(fd).

3.可以认为shutdown(fd, SHUT_RD)是空操作,因为shutdown后还可以继续从该socket读取数据,这点也许还需要进一步证实.

4.在已发送FIN包后write该socket描述符会引发EPIPE/SIGPIPE.

5.当有多个socket描述符指向同一socket对象时,调用close时首先会递减该对象的引用计数,计数为0时才会发送FIN包结束TCP连接.shutdown不同,只要以SHUT_WR/SHUT_RDWR方式调用即发送FIN包.

6.SO_LINGER与close,当SO_LINGER选项开启但超时值为0时,调用close直接发送RST(这样可以避免进入TIME_WAIT状态,但破坏了TCP协议的正常工作方式),SO_LINGER对shutdown无影响.

7.TCP连接上出现RST与随后可能的TIME_WAIT状态没有直接关系,主动发FIN包方必然会进入TIME_WAIT状态,除非不发送FIN而直接以发送RST结束连接.

时间: 2024-10-25 03:02:06

Linux上TCP的shutdown/close的相关文章

[转] TCP/IP原理、基础以及在Linux上的实现

导言:本篇作为理论基础,将向我们讲述TCP/IP的基本原理以及重要的协议细节,并在此基础上介绍了TCP/IP在LINUX上的实现. OSI参考模型及TCP/IP参考模型 OSI模型(open system interconnection reference model)是基于国际标准化组织(ISO)的建议而发展起来的,它分为如图3-1所示的七层.当卫星和无线网络出现以后,现有的协议在和这些网络互联时出现了问题,所以需要一种新的参考体系结构,能无缝地连接多个网络.这个体系结构就是TCP/IP参考模

Tomcat在Linux上的安装与配置

Tomcat在Linux上的安装与配置 1.  jdk下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html tomcat下载地址:http://tomcat.apache.org/download-70.cg 2.jdk安装与配置.(rpm包)    (1)jdk安装    rpm包:    # rpm -ivh jdk-7u79-linux-x64.rpm tar.gz

【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目

目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win7)上用虚拟机建了个 CentOS7 ,来演示下,我们windows上的项目如何发布项目到Linux上运行.我这里有个在windows上搭建过的程序,我们主要演示如何在linux上运行,所以大家不要纠结于这些,大家可以新建一个web项目尝试一下. 安装.NET Core SDK for CentOS 微软有详细的安装命令,可以参考Install

【Oracle 集群】11G RAC 知识图文详细教程之RAC在LINUX上使用NFS安装前准备(六)

RAC在LINUX上使用NFS安装前准备(六) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体系的总结,一则进行回顾复习,另则便于查询使用.本图文文档亦源于此.阅读Oracle RAC安装与使用教程前,笔者先对这篇文章整体构思和形成进行梳理.由于阅读者知识储备层次不同,我将从Oracle RAC安装前的准备与规划开始进行整体介绍安装部署Oracle RAC.始于唐博士指导,对数据库集群进

java环境--JDK和Tomcat在linux上的安装和配置

Tomcat在Linux上的安装与配置 以下使用的Linux版本为: Redhat Enterprise Linux 7.0 x86_64,Tomcat版本为tomcat-7.0.54.1.下载JDK与Tomcat.    jdk下载地址:    http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html    tomcat下载地址:    http://tomcat.apache.org

【Linux服务器搭建】——在linux上安装mysql5、tomcat8和jdk8并部署应用

Linux作为java web服务器是首要选择.在工作中也会搭建服务器.今天尝试在linux上搭建tomcat服务器. linux:suse jdk:jre 1.8 tomat:8.0.9 mysql:5.5.39 服务器是用的阿里云服务器.2G内存,双核CPU. 1.mysql安装 下载地址可以使用sohu的镜像进行下载 ,地址:http://mirrors.sohu.com/mysql/ 我下载的名称为: -rw-r--r-- 1 root root 17715414 Jul 21 20:0

So Easy! Oracle在Linux上的安装配置系列五

So Easy! Oracle在Linux上的安装配置系列五 本篇是监听器的配置的续篇,上一小节我们创建了一个监听器,创建了密码文,在监听和实例都启动的情况下,从远程windows即时客户端连接到了oracle服务器.本篇我将继续说监听器,还将完成相关的实验 以下内容整理自网络 Oracle 监听器 Listener 是一个重要的数据库服务器组件,在整个 Oracle 体系结构中,扮演着重要的作用.它负责管理 Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默认是TCP 1521

在Linux上的安装Tomcat

本文使用的软件版本如下: Linux: CentOS6.7 Tomcat: tomcat-7.0.52 JDK: jkd-8U131-linux-x64 JDK的下载安装与配置,参考上篇博文在Linux上安装Jdk的详细步骤. Tomcat的安装 解压缩    # mkdir /usr/local/tomcat    # cd /usr/local/tomcat    # tar -zxvf /software/apache-tomcat-7.0.52.tar.gz    生成链接以便版本升级 

Linux上部署Java项目

一.在Linux上安装jdk 下载:登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择对应jdk版本下载.(可在Windows上下载完成后,通过ftp文件夹共享到Linux上) 登陆linux:su root 获取root用户权限,当前工作目录不变(需要root密码)或sudo -i 不需要root密码直接切换成root(需要当前用户密码) 在user目录下建立ja