在调试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相关推荐

  1. Linux网络编程中EAGAIN错误和EINTR错误

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Lin ...

  2. linux网络重置报错,Linux网络编程中EAGAIN错误和EINTR错误

    在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). 从字面上来看,是提示再试一次.这个错误经常出现在当应用程序进行一些非阻塞 ...

  3. Linux网络编程中的几组类似功能的区别

    1.bzero与memset char buff[1024]; memset(buff,0,sizeof(buff));bzero(buff, sizeof(buff)); struct sockad ...

  4. linux网络编程中端口号和ip地址转换方法

    0.字节序 网络字节序:是大端序,即:高字节放在低地址位置 比如:0x7F000101 对于一个整型,如上,我们看到的该形式,只是在大小端主机中存储的顺序是相反的. 网络序的存储方式是  7F 00 ...

  5. linux网络编程中listen函数 backlog的含义

    结论: backlog 是用来指定在TCP连接时,同时进行 3次握手建立连接的客户端数量 listen函数在一般在调用bind之后-调用accept之前调用, 它的函数原型是: #include< ...

  6. Linux网络编程中tcp_server和tcp_client函数的封装

    2019独角兽企业重金招聘Python工程师标准>>> 本文的主要目的是将server套接字和client套接字的获取,做一个简易的封装,使用C语言完成. tcp_server 服务 ...

  7. Linux网络编程中出现 listen fail : Socket operation on non-socket错误

    错误代码: int main (int argc,char *argv[]) {int lfd = 0,cfd = 0;/* 定义服务器地址结构 和 客户端地址结构*/struct sockaddr_ ...

  8. Linux网络编程 | 信号 :信号函数、信号集、统一事件源 、网络编程相关信号

    文章目录 信号函数 信号集 统一事件源 网络编程相关信号 Linux 进程信号:信号的概念.生命周期.产生流程.阻塞 在半年前我写过一篇博客介绍了Linux中信号的概念以及处理流程,这次再来深入的讲一 ...

  9. Proxy源代码分析--谈谈如何学习linux网络编程

    Linux是一个可靠性非常高的操作系统,但是所有用过Linux的朋友都会感觉到,Linux和Windows这样的"傻瓜"操作系统(这里丝毫没有贬低Windows的意思,相反这应该是 ...

最新文章

  1. 几个比较好用的Windows API在C#中的用法。
  2. xp关无线配置服务器,xp系统怎么关闭无线功能
  3. 3d目标检测_CVPR 2020 |基用于3D目标检测的层级图网络
  4. HEVC/H265 HM10.0 分析(一)NALread.cpp
  5. LeetCode 641. 设计循环双端队列
  6. Layui layer详细参数解释说明
  7. java 轻量级同步volatile关键字简介与可见性有序性与synchronized区别 多线程中篇(十二)...
  8. tomcat配置https_「Java」 - Tomcat amp; 配置HTTPS
  9. GraphQL教程(三) .net core api
  10. python time时间戳和格式化日期_[转] Python之time模块的时间戳、时间字符串格式化与转换...
  11. 对华为HG255D路由器进行JTAG调试的进一步研究
  12. 2022爱分析· 汽车行业数字化厂商全景报告
  13. 关闭网页html代码,网页中设置禁止查看源代码(保护源代码)
  14. 重磅开源!一款引入实时语音与声纹识别的网络辩论系统!
  15. Yolov1 + Yolov2 + Yolov3 发展史、论文、代码最全资源分享合集 ! ! !
  16. 三诺 n20g 微型计算机,就是要更完美 三诺N-20GIII提升巨大
  17. 乳清蛋白和支链氨基酸不得不说的关系
  18. Python练习题——初学Python记录
  19. PHP几大框架的优点与缺点
  20. 计算机没网络怎么更新网卡驱动,电脑网卡驱动更新 怎么更新网卡驱动(图文)...

热门文章

  1. Hadoop ecosystem
  2. 搜索引擎、相关性算法的测试
  3. [转载]linux 出现: Starting MySQL.Manager of pid-file quit without updating file.[FAILED] 已解决...
  4. IOS启程06—iOS设置圆角图片
  5. Java中的强软弱虚引用《对Java的分析总结三》
  6. Oracle归档日志(翻译)
  7. 02-方法-课后思考
  8. LightOJ 1096 - nth Term 矩阵快速幂
  9. linux 账号管理与ACL权限设定
  10. 【Debian】ftp安装