转自: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区别相关推荐

  1. socket关闭close和shutdown的区别

    socket关闭close和shutdown的区别 close--只是减少该socket id的引用计数,并不直接关闭网络连接,其他使用这个socket id的进程还可以正常进行网络通信的读写操作.直 ...

  2. linux socket关闭连接 shutdown与close

    在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义 #include<sys/socket.h>int shutdown(i ...

  3. Linux socket关闭连接shutdown与close

    在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义 #include<sys/socket.h> int shutdown( ...

  4. socket关闭close和shutdown

    转载:http://blog.sina.com.cn/s/blog_693de6100101eusw.html 概述 socket关闭有2个方法close,shutdown ,2个方法的用法需要注意 ...

  5. socket阻塞和非阻塞的区别

    socket阻塞和非阻塞的区别 简单点说: 阻塞就是干不完不准回来,    非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用se ...

  6. 要关闭Windows是否需要shutdown.exe?

    Is shutdown.exe necessary when shutting Windows down, or is it just part of what is used to shut Win ...

  7. socket中close()和shutdown()区别

    基本TCP程序socket函数 并发服务器 Unix中编写并发服务器最简单的办法是fork一个子进程来服务每个客户. 当一个连接建立时,accept返回,服务器接着调用fork,然后由子进程服务客户( ...

  8. 正确关闭线程池:shutdown 和 shutdownNow 的区别

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/xiewenfeng520/ article/details/107013342 前言 本章分为两个议题 如何正确关闭线程池 s ...

  9. Java多线程学习九:如何正确关闭线程池?shutdown 和 shutdownNow 的区别

    如何正确关闭线程池?以及 shutdown() 与 shutdownNow() 方法的区别?首先,我们创建一个线程数固定为 10 的线程池,并且往线程池中提交 100 个任务,如代码所示. 复制代码 ...

最新文章

  1. R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战
  2. 了解女友的心还不如了解Python之在Python中解析和修改XML
  3. CTF题目中遇到的PHP考点总结(一)
  4. LeetCode 12. Integer to Roman
  5. React Render props
  6. Windows 8 系列(九):关于VariableSizedWrapGrid与WrapGrid 对Visibility变化而引起的布局变化的支持...
  7. 如何在Node.js中打印堆栈跟踪?
  8. vue获取屏幕高度、元素高度、元素滚动scrollTop
  9. 信号量机制实现进程的互斥、同步、前驱
  10. python中oserror_[python] 解决OSError:
  11. 码率、帧率和I B P帧
  12. maximo跟java_Maximo7.5远程调用maximo的手动输入节点工作流
  13. 【Android】自定义View和控件时出现Binary XML file line #报错行数: Binary XML file line #9: Error inflating class 类路径
  14. 手机如何测光照度_照度测定方法
  15. 自动化功能测试-Athrun—IOS学习之旅文档
  16. 【PC】电子书阅读软件推荐
  17. 用阿里云 DNS SDK 实现动态域名解析
  18. 可视化入门:从 0 到 1 开发一个图表库
  19. 埃斯顿机器人 王杰高_埃斯顿机器人总经理王杰高受邀出席2018中国机器人产业发展大会...
  20. 宋体六号字是matlab中多大,word中六号宋体对应的是22号字吗?本人运用的软件中只显示字号(10-45),要求六号宋体...

热门文章

  1. onenote导入html文件,如何批量导入 Windows 的文件夹树状结构和 HTML 文件到 OneNote 里...
  2. 楼道灯人体红外感应电路(半隔离式)
  3. Android DownloadManager下载状态查询(2)
  4. Linux分区和添加磁盘
  5. mysql数据库版本控制dbv使用
  6. 解决 Win10 无法开启任务栏右键软件打开最近项目的问题
  7. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装爬虫框架Scrapy(离线方式和在线方式)(图文详解)...
  8. mysql中nvl_oracle中nvl函数在mysql里面怎么使用
  9. Zeppelin 使用文档
  10. OSTaskCreate 和 OSTaskCreateExt 函数的区别