问题描述:今天写程序,socket后send出现这个问题,send的返回值为-1,而errno为32,这个错误代码为broken pipe,即管道破裂。

问题形成原因:后来通过排查研究,发现出现该种问题出现的可能性为以下两种:

1.socket失败,与服务器端的链接没有成功,从而管道破裂。

2.服务端将客户端的socket断开,一样造成这样的问题。

此时这样的程序收到broken pipe的信号,会自动退出我们可以在产生信号前利用方法 signal(int signum, sighandler_t handler) 设置信号的处理。如果没有调用此方法,系统就会调用默认处理方法:中止程序,显示提示信息(就是我们经常遇到的问题)。我们可以调用系统的处理方法,也可以自定义处理方法。

对一个已经收到FIN包的socket调用read方法, 如果接收缓冲已空, 则返回0,
这就是常说的表示连接关闭. 但第一次对其调用write方法时, 如果发送缓冲没问题,
会返回正确写入(发送). 但发送的报文会导致对端发送RST报文,
因为对端的socket已经调用了close, 完全关闭, 既不发送, 也不接收数据. 所以,
第二次调用write方法(假设在收到RST之后), 会生成SIGPIPE信号, 导致进程退出.

为了避免进程退出, 可以捕获SIGPIPE信号, 或者忽略它,
给它设置SIG_IGN信号处理函数:

signal(SIGPIPE, SIG_IGN);

这样, 第二次调用write方法时, 会返回-1, 同时errno置为SIGPIPE.
程序便能知道对端已经关闭
---------------------
作者:JimmyRuin
来源:CSDN
原文:https://blog.csdn.net/u013267687/article/details/52441460
版权声明:本文为博主原创文章,转载请附上博文链接!

Linux下send错误代码32相关推荐

  1. win10子系统linux下cmake编译32位程序

    文章目录 Ubuntu 18运行32位程序 添加软件源 安装编译环境 编写CMakeLists.txt cmake编译 运行程序 SUSE 15.0运行32位程序 m32编译 添加软件源 安装qemu ...

  2. Boost在Linux和windows下的编译 32位 64位

    一 简言 1. Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一 2. Boost官网地址:http://www.boost.org/ 3. 本博客示 ...

  3. linux设置send时间,[转]Socket 的send,recv在windows与linux下的超时设置

    从昨天到今天一真在搞这个网络断线检测的问题,一直没搞好,网上大多都说用ping 可以搞定,不过我就是搞不定,没办法之下想了个不是办法的办法,在 服务器上开了一个 UDP端口,监听数据,然后回发,不用T ...

  4. linux32位运行64位程序,32位windows下可以运行的程序在64位linux下报错

    已结贴√ 问题点数:20 回复次数:3 32位windows下可以运行的程序在64位linux下报错 filt.c在32位windows code:blocks 10.05下运行无任何异样. 传到64 ...

  5. Linux错误27,解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”...

    centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件. 安装 ...

  6. linux socket 结构定义 send,Linux下Socket编程中用send发送结构体

    Linux网络通信 Linux下多客户端聊天软件 最近在开发一个Linux下的聊天软件,好久没有做C语言的开发了,感觉到很多东西已经生疏了,这下又碰到用Socket传递结构体的问题,google了一下 ...

  7. 64位装32位oracle软件,在64位linux下安装32位oracle软件

    在某些情况下,有时我们需要在64位的系统下来安装32的oracle软件(如,客户的变态要求).虽然在理论上,这种方式是可行的,但在实际的安装过程中确往往是错误百出,为了避免不必要的错误,也为了方便以后 ...

  8. Linux下Socket通信中非阻塞connect、select、recv 和 recvfrom、send和sendto大致讲解,附带非租塞connect代码、MSG_NOSIGNAL

    linux中send函数MSG_NOSIGNAL异常消息 在服务器端用ctrl+c 来结束服务器接收进程来模拟服务器宕机的情况,结束服务 socket 进程之后,服务端自然关闭进程,可是 client ...

  9. linux下安装安装pcre-8.32 configure: error: You need a C++ compiler for C++ support

    linux下安装安装pcre-8.32 ./configure --prefix=/usr/local/pcre 出现以下错误 configure: error: You need a C++ com ...

最新文章

  1. 机器学习基础:理解梯度下降本质「附Python代码」
  2. 腾讯(求丢失的元素)
  3. 为什么要使用叶脊(leaf-spine)拓扑网络zz
  4. php打印预览jquery,php 实现打印预览的功能
  5. 第27月第24天 git pull fetch
  6. 珍惜生命 远离中国足球
  7. 常见数据类型的手机二维码生成与识别格式参考
  8. 程序员2009精华本 有哪些精彩值得期待
  9. 关于雷霄骅博士的博客FFMPEG+SDL的音频播放器播放有杂音的问题
  10. RS-232C接口定义(DB9)
  11. 【图片识别算法】黑白图片输出为二进制矩阵 --python代码
  12. 回溯法 子集和问题
  13. Nginx自动跳转到带www域名规则配置、Nginx多域名向主域名跳转
  14. Python导包的几种方法,自定义包的生成以及导入详解
  15. (三)elasticsearch学习笔记————文档基本操作
  16. 怎么用计算机计算复利,如何用普通计算器计算复利
  17. Mendix敏捷开发零基础学习《三》-高级 (数据删除保护机制、数据关联删除、Security安全、调用外部接口、调用JAVA代码)
  18. 使用Android的Service实现后台定时检测并重启应用
  19. 交通流预测爬坑记(一):交通流数据集,原始数据
  20. Android系统修改无操作进入屏保页

热门文章

  1. UITableViewCell 选中的状态小技巧
  2. android插件化-获取apkplug框架已安装插件-03
  3. 关于autoupgader的狗屎问题
  4. 大学生应当趁早谋划未来(二)--给表弟的建议
  5. mvc的Controller返回值类型ActionResult详解
  6. php 工资 2018,佛山市2018年平均工资(社平工资)
  7. go语言服务器连接mysql,服务器mysql怎么配置才能远程连接
  8. 关闭运动轨迹_网球初学者如何正确入门网球运动,有哪些学习细节
  9. php安装dat,PHP Parsing a .dat file
  10. java 布隆过滤器_什么是布隆过滤器(Bloom Filter)?