博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SIGPIPE并产生一个信号处理
阅读量:5239 次
发布时间:2019-06-14

本文共 1656 字,大约阅读时间需要 5 分钟。

阅读TCP某物,知道server并关闭sockfd当写两次,会产生SIGPIPE信号,假如不治疗,默认将挂起server

弄个小样本试验:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ERR_EXIT(m) \ do { \ perror(m);\ exit(EXIT_FAILURE);\ }while(0)void handle(int arg){ printf("sigpipe\n");}int main(int argc, const char *argv[]){ signal(SIGPIPE, handle);//SIGPIPE信号的处理 int sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd == -1) ERR_EXIT("socket"); struct sockaddr_in seraddr; seraddr.sin_family = AF_INET; seraddr.sin_port = htons(8888); seraddr.sin_addr.s_addr = inet_addr("127.0.0.1") ; socklen_t len = sizeof(seraddr); if(-1 == (bind(sockfd, (struct sockaddr*)&seraddr, len))) ERR_EXIT("bind"); if(listen(sockfd, 3) == -1) ERR_EXIT("listen"); int clientfd = accept(sockfd, NULL, NULL); printf("client\n"); while(1) { sleep(3); printf("hello\n"); write(clientfd, "hello", sizeof("hello")); } return 0;}

client使用telnet连接

发现:

   当client关闭后,server端还会写两次后。就会收到SIGPIPE信号,兴许继续会收到此信号

telnet localhost 8888

--》client:

  

syswj@host ~]$ telnet localhost 8888Trying ::1...telnet: connect to address ::1: Connection refusedTrying 127.0.0.1...Connected to localhost.Escape character is '^]'.hellohellohello^]telnet> Connection closed.

   server信息:

  

➜  mianshi git:(master) ✗ ./a.out clienthellohellohellohello   //-》对方会发送一个RST复位报文hellosigpipe   hellosigpipe    //-->是因为write导致的hellosigpipehellosigpipe^C

能够看到是在client关闭后,再发送 第2个信息后才收到的SIFPIPE信号

兴许发送仍然会收到SIGPIPE信号

       

版权声明:本文博客原创文章。博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/mfrbuaa/p/4718496.html

你可能感兴趣的文章
Linux中修改docker镜像源及安装docker
查看>>
数位dp(模板+例题)
查看>>
Android 自动安装脚本
查看>>
[编程之美]电梯调度算法
查看>>
常用的jQuery九宫格布局图片展示特效代码
查看>>
scrollView的bounds
查看>>
【洛谷】[FJOI2018]领导集团问题
查看>>
《springcloud 三》分布式配置中心
查看>>
Java基础知识强化之集合框架笔记06:Collection集合存储自定义对象并遍历的案例...
查看>>
Android(java)学习笔记25:Android 手机拨号
查看>>
Linux ftp访问控制配置,包括访问ftp权限和访问ftp目录权限
查看>>
leetcode[148]Sort List
查看>>
ES6 Array扩展 学习笔记
查看>>
Swoole WebSocket 的应用
查看>>
Linux源码编译安装nginx
查看>>
Java异常知识处理_NoClassDefFoundError和ClassNotFoundException有什么区别
查看>>
[bbk5388] 第91集 -第11章 -数据库诊断 07
查看>>
CentOS7 安装 JIRA 7.2.x 教程:下载、安装、汉化、破解
查看>>
iOS RunTime你知道了总得用一下
查看>>
unity使用深度优先搜索算法自动生成随机迷宫
查看>>