Socket之shutdown()用法
通常来说,socket是双向的,即数据是双向通信的。但有些时候,你会想在socket上实现单向的socket,即数据往一个方向传输。
单向的socket便称为半开放Socket。要实现半开放式,需要用到shutdown()函数。
一般来说,半开放socket适用于以下场合:
(1)当你想要确保所有写好的数据已经发送成功时。如果在发送数据的过程中,网络意外断开或者出现异常,系统不一定会返回异常,这是你可能以为对端已经接收到数据了。这时需要用shutdown()来确定数据是否发送成功,因为调用shutdown()时只有在缓存中的数据全部发送成功后才会返回。
(2)想用一种方法来捕获程序潜在的错误,这错误可能是因为往一个不能写的socket上写数据,也有可能是在一个不该读操作的socket上读数据。当程序尝试这样做时,将会捕获到一个异常,捕获异常对于程序排错来说是相对简单和省劲的。
(3)当您的程序使用了fork()或者使用多线程时,你想防止其他线程或进程访问到该资源,又或者你想立刻关闭这个socket,那么可以用shutdown()来实现。
另外说一下,如果调用了Close()函数,程序中只是确保了对于某个特定的进程或线程来说,该连接是关闭的;但socket只有在所有的进程调用了Close()或者socket超出了工作范围时,才会真正的被关闭或删除。而如果想立刻关闭socket,那么可以通过shutdown()来实现。
shutdown()的调用是需要一个参数:0代表禁止下次的数据读取;1代表禁止下次的数据写入;2代表禁止下次的数据读取和写入。
同时,shutdown()的效果是累计的,不可逆转的。既如果关闭了一个方向数据传输,那么这个方向将会被关闭直至完全被关闭或删除,而不能重新被打开。如果第一次调用了shutdown(0),第二次调用了shutdown(1),那么这时的效果就相当于shutdown(2),也就是双向关闭socket。
---------------------
作者:moxiaomomo
来源:CSDN
原文:https://blog.csdn.net/moxiaomomo/article/details/7897943
版权声明:本文为博主原创文章,转载请附上博文链接!
Socket之shutdown()用法相关推荐
- c语言 system() 之控制dos;shutdown 用法
知识点 system函数 功 能: 发出一个DOS命令 用 法:头文件 #include<stdlib.h> int system(char *command); DO ...
- ShutDown用法及参数
用法: shutdown [-i | -l | -s | -r | -a] [-f] [-m computername] [-t xx] [-c "comment"] [-d up ...
- socket 函数 setsockopt()用法
资料来源: 微软MSDN在线帮助 setsockopt(s, level, optname, optval, optlen) 函数 https://msdn.microsoft.com/library ...
- qt 下 原生socket tcp 基本用法
qt中使用socket, 首先要包含windows.h头文件 还要在pro文件中,增加:LIBS += -lpthread libwsock32 libws2_32 引入相关函数的库 TCP 稳定传输 ...
- Shutdown用法
下面我就介绍一个在Windows XP下实现定时关机的简单方法 指定系统在22分钟后自动关闭:点击"开始→运行",在"打开"中输入命令"Shutdow ...
- python3 socket shutdown 简介
如果要表示输出数据已经结束,则可以通过关闭 socket 来实现.但如果彻底关闭了 socket,则会导致程序无法再从该 socket 中读取数据. 在这种情况下,socket 提供了一个 shutd ...
- socket关闭close和shutdown
转载:http://blog.sina.com.cn/s/blog_693de6100101eusw.html 概述 socket关闭有2个方法close,shutdown ,2个方法的用法需要注意 ...
- linux socket 错误 Transport endpoint is not connected 在 recv shutdown 中的触发时机
1.recv触发情况 用错了socket,把监听socket 和 连接socket 错误使用.实例如下: for(;;){socklen_t len = sizeof(client_address); ...
- socket UDP TCP 的一些用法
UDP 用最通俗的话讲,所谓UDP,就是发送出去就不管的一种网络协议.因此UDP编程的发送端只管发送就可以了,不用检查网络连接状态.下面用例子来说明怎样编写UDP,并会详细解释每个API和数据类型. ...
最新文章
- 熬了几个大夜,学完一套985博士总结的OpenCV学习笔记(20G高清/PPT/代码)
- Mysql my.cnf配置文件记录
- 专业软件测试面试题汇总
- Java—遍历集合的N种方式总结Collections工具类
- html如何做幻灯片效果,超酷的CSS3幻灯片效果
- PJSIP添加G729编码
- 路由器的下一跳计算(网关)
- 人工智能AI 生成的艺术:从文本到图像
- C 语言面试题大汇总
- 大学计算机考试知识点归纳总结,大学计算机基础重点归纳.doc
- VS1005 HiRes 高清录音开发模块 BOB MK2
- android 列表倒计时,Android ListView列表实现倒计时
- css鼠标划过时的一些小特效
- maya刷权重时有个叉_为什么maya刷权重 笔刷是打叉
- python国际象棋ai程序_只需五步!手把手教你搭建国际象棋AI机器人
- 给你的Pycharm装一个漂亮的“皮肤“
- QML Tumbler使用介绍
- protobuf根据有关联的.proto文件进行编译
- 利用Python实现四则运算
- 企业级容器技术docker(12)docker swarm
热门文章
- 7.3国服人口最多的服务器,魔兽国服人口普查:总人口稳定 双阵营法师增长
- 数据库表中常用的查询实验
- 服务器cpu散热器性能,消费级散热器见多了,服务器的Xeon Platinum用什么散热器呢?...
- ITFLY8架构师之家公众号试运营
- ubuntu curl: not found
- 无贡献、无创新、无思路,ML领域准博士求助:论文到底要怎么创新? | Reddit热议...
- 简单几部思路清晰的教会你配置 Lamp(apache+mysql+php)的配置
- 某腾LOL开发负责人教你如何用Java实现一把 LOL 案例,学会模板设计模式!
- 我的计算机老师200字,我的老师作文200字
- 云服务中消灭小黄图的大宝剑---X次元口袋