linux网络编程中需要注意的信号SIGPIPE
在调试cs时,s端循环收,c端循环发,s端意外崩溃后,c端自动退出,终端提示SIGPIPE导致c端退出。man 7 signal:
SIGPIPE 13 Term Broken pipe: write to pipe with no readers
SIGPIPE发生在:写一个没有读的管道,默认动作是终止程序。man 2 write:
EPIPE fd is connected to a pipe or socket whose reading end is closed.When this happens the writing process will also receive a SIG-PIPE signal. (Thus, the write return value is seen only if theprogram catches, blocks or ignores this signal.)
write的错误码EPIPE发生在写的fd对应的pipe或者socket对端的读端关闭了时。写操作的返回值仅当程序捕获,阻塞,忽略此信号时才能收到,因为SIGPIPE默认会终止程序。
有一个细节,使用gdb单步调试c端,在开始write前,手动终止s端,c端收到s的FIN分节,并回复ack,c端处于CLOSE_WAIT状态,此时,c端的write操作返回的数值是正常的,socket状态不存在了,wireshark抓包会发现一个RST包,表示socket连接已重置,再次write,将会立即收到SIGPIPE。准确的讲,写一个已经明确知道对端关闭的socket,会收到对端发送的一个RST分节,再次写此socket,会产生SIGPIPE。
一般出现SIGPIPE的情况有:
1.write一个未connect的socketxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
转载于:https://www.cnblogs.com/thammer/p/7103065.html
linux网络编程中需要注意的信号SIGPIPE相关推荐
- Linux网络编程中EAGAIN错误和EINTR错误
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Lin ...
- linux网络重置报错,Linux网络编程中EAGAIN错误和EINTR错误
在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). 从字面上来看,是提示再试一次.这个错误经常出现在当应用程序进行一些非阻塞 ...
- Linux网络编程中的几组类似功能的区别
1.bzero与memset char buff[1024]; memset(buff,0,sizeof(buff));bzero(buff, sizeof(buff)); struct sockad ...
- linux网络编程中端口号和ip地址转换方法
0.字节序 网络字节序:是大端序,即:高字节放在低地址位置 比如:0x7F000101 对于一个整型,如上,我们看到的该形式,只是在大小端主机中存储的顺序是相反的. 网络序的存储方式是 7F 00 ...
- linux网络编程中listen函数 backlog的含义
结论: backlog 是用来指定在TCP连接时,同时进行 3次握手建立连接的客户端数量 listen函数在一般在调用bind之后-调用accept之前调用, 它的函数原型是: #include< ...
- Linux网络编程中tcp_server和tcp_client函数的封装
2019独角兽企业重金招聘Python工程师标准>>> 本文的主要目的是将server套接字和client套接字的获取,做一个简易的封装,使用C语言完成. tcp_server 服务 ...
- Linux网络编程中出现 listen fail : Socket operation on non-socket错误
错误代码: int main (int argc,char *argv[]) {int lfd = 0,cfd = 0;/* 定义服务器地址结构 和 客户端地址结构*/struct sockaddr_ ...
- Linux网络编程 | 信号 :信号函数、信号集、统一事件源 、网络编程相关信号
文章目录 信号函数 信号集 统一事件源 网络编程相关信号 Linux 进程信号:信号的概念.生命周期.产生流程.阻塞 在半年前我写过一篇博客介绍了Linux中信号的概念以及处理流程,这次再来深入的讲一 ...
- Proxy源代码分析--谈谈如何学习linux网络编程
Linux是一个可靠性非常高的操作系统,但是所有用过Linux的朋友都会感觉到,Linux和Windows这样的"傻瓜"操作系统(这里丝毫没有贬低Windows的意思,相反这应该是 ...
最新文章
- loj6300 「CodePlus 2018 3 月赛」博弈论与概率统计
- 大战设计模式【17】—— 建造者模式
- 阿里、网易、滴滴共十次前端面试碰到的问题
- 拓端tecdat|R语言 PCA(主成分分析),CA(对应分析)夫妻职业差异和马赛克图可视化
- 怎么用U盘安装ubuntu系统具体步骤图文详解
- 利用DEEPLABV3-RESNET101获取人体蒙版
- 暮雨小巷,殇了身影,冷了沙洲
- Unity手机游戏性能优化系列:针对CPU端的性能调优
- 重磅 | Stratifyd实力入选《2022中国数据智能产业图谱1.0》
- 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)
- js拖拽图片到浏览器上传
- hive数据文件备份
- 大势所趋,RIA已成为主流应用程序!
- 中软python机试_中软国际入职机试题
- 阿里云网盘内测_超大杯福利,阿里云网盘内测资格+20年资源积累神站
- 隐私合规:移动SDK安全要求及测试内容
- 程序人生--我已经努力了7年
- 苹果OFFICE 2011MAC打开WORD字体乱码解决方法
- java删除文件夹指定日期的文件
- VUE实现调用摄像头和拍照功能