socket关闭的close和shutdown区别
转自:http://hi.baidu.com/yoshubom/blog/item/caa3b2de5d210559cdbf1a2b.html
socket关闭close和shutdown
socket关闭有2个close,shutdown
他们之间的区别:
close-----关闭本进程的socket id,但链接还是开着的,用这个socket id的其它进程还能用这个链接,能读或写这个socket id
shutdown--则破坏了socket 链接,读的时候可能侦探到EOF结束符,写的时候可能会收到一个SIGPIPE信号,这个信号可能直到
socket buffer被填充了才收到,shutdown还有一个关闭方式的参数,0 不能再读,1不能再写,2 读写都不能。
===============================================================================================================
socket 多进程中的shutdown, close使用
当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作:
close(sockfd);
你也可以调用shutdown()函数来关闭该socket。该函数允许你只停止在某个方向上的数据传输,而一个方向上的数据传输继
续进行。如你可以关闭某socket的写操作而允许继续在该socket上接受数据,直至读入所有数据。
int shutdown(int sockfd,int how);
Sockfd是需要关闭的socket的描述符。参数 how允许为shutdown操作选择以下几种方式:
SHUT_RD:关闭连接的读端。也就是该套接字不再接受数据,任何当前在套接字接受缓冲区的数据将被丢弃。进程将不能对该
套接字发出任何读操作。对TCP套接字该调用之后接受到的任何数据将被确认然后无声的丢弃掉。
SHUT_WR:关闭连接的写端,进程不能在对此套接字发出写操作
SHUT_RDWR:相当于调用shutdown两次:首先是以SHUT_RD,然后以SHUT_WR
使用close中止一个连接,但它只是减少描述符的参考数,并不直接关闭连接,只有当描述符的参考数为0时才关闭连接。
shutdown可直接关闭描述符,不考虑描述符的参考数,可选择中止一个方向的连接。
注意:
1>. 如果有多个进程共享一个套接字,close每被调用一次,计数减1,直到计数为0时,也就是所用进程都调用了close,套
接字将被释放。
2>. 在多进程中如果一个进程中shutdown(sfd, SHUT_RDWR)后其它的进程将无法进行通信. 如果一个进程close(sfd)将不会
影响到其它进程. 得自己理解引用计数的用法了. 有Kernel编程知识的更好理解了.
同事发现的该问题, 认为很重要就记下了!
socket关闭的close和shutdown区别相关推荐
- socket关闭close和shutdown的区别
socket关闭close和shutdown的区别 close--只是减少该socket id的引用计数,并不直接关闭网络连接,其他使用这个socket id的进程还可以正常进行网络通信的读写操作.直 ...
- linux socket关闭连接 shutdown与close
在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义 #include<sys/socket.h>int shutdown(i ...
- Linux socket关闭连接shutdown与close
在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义 #include<sys/socket.h> int shutdown( ...
- socket关闭close和shutdown
转载:http://blog.sina.com.cn/s/blog_693de6100101eusw.html 概述 socket关闭有2个方法close,shutdown ,2个方法的用法需要注意 ...
- socket阻塞和非阻塞的区别
socket阻塞和非阻塞的区别 简单点说: 阻塞就是干不完不准回来, 非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用se ...
- 要关闭Windows是否需要shutdown.exe?
Is shutdown.exe necessary when shutting Windows down, or is it just part of what is used to shut Win ...
- socket中close()和shutdown()区别
基本TCP程序socket函数 并发服务器 Unix中编写并发服务器最简单的办法是fork一个子进程来服务每个客户. 当一个连接建立时,accept返回,服务器接着调用fork,然后由子进程服务客户( ...
- 正确关闭线程池:shutdown 和 shutdownNow 的区别
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/xiewenfeng520/ article/details/107013342 前言 本章分为两个议题 如何正确关闭线程池 s ...
- Java多线程学习九:如何正确关闭线程池?shutdown 和 shutdownNow 的区别
如何正确关闭线程池?以及 shutdown() 与 shutdownNow() 方法的区别?首先,我们创建一个线程数固定为 10 的线程池,并且往线程池中提交 100 个任务,如代码所示. 复制代码 ...
最新文章
- R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战
- 了解女友的心还不如了解Python之在Python中解析和修改XML
- CTF题目中遇到的PHP考点总结(一)
- LeetCode 12. Integer to Roman
- React Render props
- Windows 8 系列(九):关于VariableSizedWrapGrid与WrapGrid 对Visibility变化而引起的布局变化的支持...
- 如何在Node.js中打印堆栈跟踪?
- vue获取屏幕高度、元素高度、元素滚动scrollTop
- 信号量机制实现进程的互斥、同步、前驱
- python中oserror_[python] 解决OSError:
- 码率、帧率和I B P帧
- maximo跟java_Maximo7.5远程调用maximo的手动输入节点工作流
- 【Android】自定义View和控件时出现Binary XML file line #报错行数: Binary XML file line #9: Error inflating class 类路径
- 手机如何测光照度_照度测定方法
- 自动化功能测试-Athrun—IOS学习之旅文档
- 【PC】电子书阅读软件推荐
- 用阿里云 DNS SDK 实现动态域名解析
- 可视化入门:从 0 到 1 开发一个图表库
- 埃斯顿机器人 王杰高_埃斯顿机器人总经理王杰高受邀出席2018中国机器人产业发展大会...
- 宋体六号字是matlab中多大,word中六号宋体对应的是22号字吗?本人运用的软件中只显示字号(10-45),要求六号宋体...
热门文章
- onenote导入html文件,如何批量导入 Windows 的文件夹树状结构和 HTML 文件到 OneNote 里...
- 楼道灯人体红外感应电路(半隔离式)
- Android DownloadManager下载状态查询(2)
- Linux分区和添加磁盘
- mysql数据库版本控制dbv使用
- 解决 Win10 无法开启任务栏右键软件打开最近项目的问题
- 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装爬虫框架Scrapy(离线方式和在线方式)(图文详解)...
- mysql中nvl_oracle中nvl函数在mysql里面怎么使用
- Zeppelin 使用文档
- OSTaskCreate 和 OSTaskCreateExt 函数的区别