在调试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. loj6300 「CodePlus 2018 3 月赛」博弈论与概率统计
  2. 大战设计模式【17】—— 建造者模式
  3. 阿里、网易、滴滴共十次前端面试碰到的问题
  4. 拓端tecdat|R语言 PCA(主成分分析),CA(对应分析)夫妻职业差异和马赛克图可视化
  5. 怎么用U盘安装ubuntu系统具体步骤图文详解
  6. 利用DEEPLABV3-RESNET101获取人体蒙版
  7. 暮雨小巷,殇了身影,冷了沙洲
  8. Unity手机游戏性能优化系列:针对CPU端的性能调优
  9. 重磅 | Stratifyd实力入选《2022中国数据智能产业图谱1.0》
  10. 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)
  11. js拖拽图片到浏览器上传
  12. hive数据文件备份
  13. 大势所趋,RIA已成为主流应用程序!
  14. 中软python机试_中软国际入职机试题
  15. 阿里云网盘内测_超大杯福利,阿里云网盘内测资格+20年资源积累神站
  16. 隐私合规:移动SDK安全要求及测试内容
  17. 程序人生--我已经努力了7年
  18. 苹果OFFICE 2011MAC打开WORD字体乱码解决方法
  19. java删除文件夹指定日期的文件
  20. VUE实现调用摄像头和拍照功能

热门文章

  1. 实现了发动机功能,支持Slider Motor、Hinge Motor、Hinge2 Motor。
  2. 06 ansible剧本功能实践介绍
  3. Black White(尺取)
  4. 远程过程调用(RPC)
  5. 六时出行 App 隐私政策
  6. Centos7安装并配置mysql5.6
  7. 前端向后端发送请求,后端返回的一个值的请求的ajax.get();方法
  8. [HDU4635] Strongly connected
  9. CompletionService VS ExecutorService
  10. cojs EX_香蕉 题解报告