一·close(int sockfd)

  当server和client建立连接,server调用close(),则server发送fin给client,server不在通过该套接字继续传送消息或者接收消息,此时client调用read,如果接收到fin则返回0,但是此时的client还是可以write给server,并且write只是将信息发送给缓冲区,当server收到该数据报会返回一个rst数据报连接重置,表示server不再接受消息,如果要传送消息,则需要连接重置。client接收到RST后并不会直接传送给应用层,只是将该状态保存在TCP协议层,当client再次调用write给server时,因为连接已经处于RST状态,则不再有数据发出,而是SIGPIPE一个信号给应用层.仅此计数为0时才关闭套接字,发送TCP的正常连接终止序列

  并且该函数并不是真正的四分组终止序列,而是将描述符的访问计数-1,

二·shutdown(int sockfd,int howto)

  1>close将描述符的访问计数-1,只有在此计数为0时关闭套接字。用shutdown激发TCP的正常连接终止序列,而不管访问计数。

  2>close终止了数据传送的两个方向:读和写。由于TCP连接数全双工的,有很多时候要通知另一端已完成了数据发送,即使另一端有很多数据要发送也是如此,shutdown函数可以仅仅关闭连接的读,写或两个方向都关闭

  howto:

  1.SHUT_RD 关闭连接的读一半,不再接受套接口的数据,而且留在套接口接收缓冲区中的数据都作废,进程不能再对套接口执行任何读进程。调用此函数后,TCP套接口接受的数据被接收,但数据本身被扔掉。

  2.SHUT_WD 关闭连接的写一半 此情况称为半关闭,当前留在套接口发送给缓冲区的数据都被发送,后跟正常的TCP终止序列,进程不能在执行对套接口的任何写函数。

  3.SHUT_RDWR 连接的读这一半和写这一半都关闭,等同于调用函数shutdown()两次,第一次调用时用SHUT_RD,第二次调用时用SHUT_WR。

  

close()和shutdown()函数的更多相关文章

  1. close和shutdown函数的区别

    close函数首先是将传入的socket句柄引用数减1(因为fork进程时会导致socket句柄被多个进程引用),待到引用数等于0的时候,close才会真正关闭连接. shutdown函数是立刻关闭连 ...

  2. UNIX网络编程读书笔记:shutdown函数

    终止网络连接的通常方法是调用close函数.不过close有两个限制,却可以使用shutdown来避免. close 把描述字的引用计数减1,仅在该计数变为0时才关闭套接口.使用shutdown可以不 ...

  3. close与shutdown函数

    linux网络编程之socket(十):shutdown 与 close 函数的区别  http://blog.csdn.net/yijiu0711/article/details/17349169 ...

  4. linux select函数 shutdown函数

    #include<sys/select.h> #include<sys/time.h> int select(int maxfdp1,fd_set *readset,fd_se ...

  5. shutdown函数

    #include <sys/socket.h> int shutdown(int sockfd, int howto); 返回:若成功则为0,若出错则为- (1)该函数的行为依赖于howt ...

  6. UNIX网络编程——shutdown 与 close 函数 的区别

    假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据 ...

  7. socket shutdown 与 close 函数 的区别

    假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据 ...

  8. linux网络编程中的shutdown()与close()函数

    1.close()函数 int close(int sockfd); //返回成功为0,出错为-1 close 一个套接字的默认行为是把套接字标记为已关闭,然后立即返回到调用进程,该套接字不能再由cl ...

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

    linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这 ...

随机推荐

  1. angularJS入门小Demo【简单测试js代码的方法】

    1.首先建立一个文件夹 demo, 2.在其中建立一个文本文档,改名为 demo-1.html, 3.把html中要引入的 js 文件拷贝到 demo目录下, 4.然后用 Notepadd++ 编辑刚 ...

  2. Linux安装cx_Oracle

    安装依赖包 yum -y install gcc python-devel 确认以下变量都已经设置好了 export ORACLE_HOME=/home/oracle/app/oracle/produ ...

  3. 使用PowerDesigner建模

    一.使用PowerDesigner建模 在数据库概念设计中已经分析了本系统中主要的数据应实体对象,通过这些实体可以得出数据表结构的基本模型,最终实施到数据库中, 形成完整的数据结构.本系统将使用Pow ...

  4. linux查找文件目录及mysql卸载

    我们要卸载 mysql但是不知道其安装在哪里了,可以用  where +关键词 的方式查找,如上图 输入 whereis mysql 后,下面显示出了4个包含mysql的位置. ..... 查看安装m ...

  5. 题解 【luogu P2680 NOIp提高组2015 运输计划】

    题目链接 题解 题意 一棵树上有\(m\)条路径,可以将其中一条边的权值改为0,问最长的路径最短是多少 分析 最短的路径最长自然想到二分最长路径,设其为\(dis\) 关键在于如何check chec ...

  6. Leetcode 703. 数据流中的第K大元素

    1.题目要求 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器, ...

  7. uboot下的命令行

    1.典型嵌入式linux系统启动过程: 嵌入式系统上电后先执行uboot.然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就 ...

  8. CursorAdapter中getView newView bindView异同

    Adapter的作用是界面与数据之间的桥梁,通过设置适配器至ListView控件后(如调用ListView的 setAdapter(ListAdapter adapter)               ...

  9. 洛谷P2860 [USACO06JAN]冗余路径Redundant Paths

    题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1. ...

  10. zk-web

    Ref:https://github.com/qiuxiafei/zk-web zk-web是一个用clojure with noir and boostrap写的Zookeeper WEB UI管理 ...