网络编程close与shutdown的区别
一、close与shutdown 的区别:
1、close终止了数据传送的两个方向; 这个函数会对套接字引用计数减一,一旦发现套接字引用计数到 0,就会对套接字进行彻底释放,并且会关闭 TCP 两个方向的数据流。
2、shutdown 可以有选择的终止某个方向的数据传送或者数据传送的两个方向、
二、shutdown 如果howto=1(SHUT_WR),就可以保证对等方接收到一个EOF字符,而不管其他进程是否已经打开了套接字(不管引用计数是否为1都激发TCP的正常终止连接)。shutdown直接使得该套接字不可用,如果有别的进程企图使用该套接字,将会受到影响。而close不能保证(详见下面三中的例子,conn引用计数减为0才关闭),直到套接字引用计数减为0时才发送。也就是说直到所有的进程都关闭了套接字。
三、
int shutdown(int sockfd,int howto)
howto=SHUT_RD (0)关闭连接的读的一半,不再接收数据
howto=SHUT_WR (1)关闭连接的写的一半,
howto=SHUT_RDWR(2)
例子:
int conn;
pid_t pid=fork();
if(pid==-1)
ERR_EXIT("fork");
if(pid==0) //子进程
{//通信//.... //子进程使用完conn,close(conn) 引用计数减为0,这时才会向双方发送FIN段。close(conn);
} else if(pid>0) //父进程
{//父进程不会向客户端发送FIN.要考虑到引用计数。//close(conn) 父进程用不到conn,将conn引用计数减一 。 //shutdown(conn,SHUT_WR) 的话不理会引用计数,直接向对方发送FIN段close(conn);
}
网络编程close与shutdown的区别相关推荐
- 网络编程学习笔记(shutdown函数)
终止网络连接的正常方法是close,但close有两个限制,可由shutdown来避免 1.close将描述字的访问计数减1,仅在此计数为0时才关闭套接口.用shutdown可以激发TCP的正常连接终 ...
- Python网络编程—(TCP、UDP区别)
tcp套接字和udp套接字编程区别 1.流式套接字是以字节流方式传输数据,数据报套接字以数据报形式传输 2.tcp套接字会有粘包,udp套接字有消息边界不会粘包 3.tcp套接字保证消息的完整性,ud ...
- Linux网络编程中的几组类似功能的区别
1.bzero与memset char buff[1024]; memset(buff,0,sizeof(buff));bzero(buff, sizeof(buff)); struct sockad ...
- Java基础学习总结:网络编程之(四)TCP与UDP的区别及常见的网络协议(转)
TCP和UDP的区别 原文:https://blog.csdn.net/li_ning_/article/details/52117463 1.TCP与UDP基本区别 基于连接与无连接 TCP要求系统 ...
- C语言网络编程:close或者shutdown断开通信连接
文章目录 前言 close函数介绍 shutdown函数介绍 前言 这里在主要通过实例进行描述close函数在网络编程中的使用 TCP编程模型中客户端或者服务器只要主动通过close发起断开连接的请求 ...
- 网络编程中BIO和NIO的区别
网络编程中BIO和NIO的区别 先上结论 BIO中,每个请求因为要阻塞直到结果返回,所以比较好的解决是每个请求都需要一个线程来处理,但是线程又是他的制约条件. NIO中,每个请求进来都会绑定到一个ch ...
- 【Linux网络编程】无连接和面向连接协议的区别
网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议.尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说 ...
- 网络编程知识预备(3) ——SOCKET、TCP、HTTP之间的区别与联系
参考:SOCKET,TCP,HTTP之间的区别与联系 作者:丶PURSUING 发布时间: 2021-03-19 11:54:01 网址:https://blog.csdn.net/weixin_44 ...
- 脑残式网络编程入门(八):你真的了解127.0.0.1和0.0.0.0的区别?
本文由"小姐姐养的狗"原创发布于"小姐姐味道"公众号,原题<127.0.0.1和0.0.0.0地址的区别>,收录时有优化和改动.感谢原作者的分享. ...
- linux网络编程--shut_down和close()函数的区别
在Linux C网络编程中,一共有两种方法来关闭一个已经连接好的网络通信,它们就是close函数和shutdown函数,它们的函数原型分别为: 1 #include<unistd.h> 2 ...
最新文章
- 礼赞 Wordpress,蝉知可直接使用 Wordpress 模板
- 19年8月 字母哥 第五章 静态资源与模板引擎的整合 用热点公司网不行
- 柯洁获清华大学免试入学推荐资格
- 容器编排技术 -- Kubernetes kubectl autoscale 命令详解
- Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)
- 性能提升 3 倍的树莓派 4,被爆设计缺陷!
- 调用codesoft,打印条码,批量连续打印,变量打印
- Atitit 信息管理 艾提拉著 CAPT2 数据存储与分类 聚集.docx 目录 1. 按照存储位置	1 1.1. 网盘	1 1.2. 存储在eml imap中 方便检索	1 1.3. 分散与
- python snap7怎么用_Python-snap7与S7-1500的通讯
- 《大师谈游戏设计——创意与节奏》【笔记一】
- 计算机网络与通信之计算机网络体系结构
- vmware安装了vmware tools还是无法复制文件与文本(ubuntu16.04)
- xmlDocument是什么?(转)
- 搜狗输入法原先能在word中输入中文,现在不行。
- ps人像磨皮皮肤处理教程
- 基于C的VAD实现一
- linux shell sed快速开始-(添加文本到文件的第一行和最后一行、文本的行尾添加字符)
- Mr. Kitayuta vs. Bamboos[二分+贪心][图像分析]
- python中sklearn实现决策树及模型评估_sklearn实现决策树
- python归一化 增大差异_Python实现描述性统计