signal(SIGPIPE, SIG_IGN);

TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 
但本端只是收到FIN包. 

按照TCP协议的语义, 表示对端只是关闭了其所负责的那一条单工信道, 仍然可以继续接收数据. 也就是说, 因为TCP协议的限制, 
一个端点无法获知对端的socket是调用了close还是shutdown.

这句不太准确,虽然本端无法知道对端是close还是shutdown(S,SHUT_WR),但是如果对端是close并且socket描述符的使用计数减为0的话,

那么实际对端是关闭了两个信道。原因,实际下面已经讲了,对端如果close,相当于shutdow(S,SHUT_BOTH),本端如果再write的话,就会收到

RST的。

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

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

signal(SIGPIPESIG_IGN);

这样, 第二次调用write方法时, 会返回-1, 同时errno置为SIGPIPE. 程序便能知道对端已经关闭.

总结:

   实际这个函数的目的就是防止程序收到SIGPIPE后自动退出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql与groupconcat相反的_MySQL中GROUP_CONCAT的反义词是什么?

我认为这是你需要的(存储过程):Mysql split column string into rowsDELIMITER $$DROP PROCEDURE IF EXISTS explode_table $$CREATE PROCEDURE explode_table(bound VARCHAR(255))BEGINDECLARE id INT DEFAULT 0;DECLARE value TEXT;DECLARE occurance INT DEFAULT…

leetcode: Roman to Integer

http://oj.leetcode.com/problems/roman-to-integer/ Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999. 思路: 根据个十百千位分别作为一个状态机处理就可以了。 1 class Solution {2 public:3 in…

mysql 线程池 下载_java线程池实现批量下载文件

本文实例为大家分享了java线程池实现批量下载文件的具体代码,供大家参考,具体内容如下1 创建线程池package com.cheng.webb.thread;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ExecutorService;import java.util.conc…

sqlite3 编译问题

sqlite3用到libpthread和libdl因此要链接这两个库 假如先把sqlite3.c编译成sqlite3.o或者libsqlite3.a g -lm -lpthread -ldl -o 目标 main.o sqlite3.o 或者 g -lm -lpthread -ldl -lsqlite3 -o 目标 main.o sqlite3.o 都会报链接错误,找不到pthread和dl里面的…

从零开始学习Hadoop--第2章 第一个MapReduce程序

1.Hadoop从头说 1.1 Google是一家做搜索的公司 做搜索是技术难度很高的活。首先要存储很多的数据,要把全球的大部分网页都抓下来,可想而知存储量有多大。然后,要能快速检索网页,用户输入几个关键词找资料,越快越好&…

mysql可以使用sqlplus么_使用sqlplus

1. 执行一个SQL脚本文件SQL>start file_nameSQL> file_name可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可.等于start命令,用来运行一个sql脚本文件命令调用当前目录下的&#…

CPU8085 8086名字的由来

为什么CPU叫8085呢? 8085这个名字的由来还是很有逻辑的:The naming of microprocessor indicates historical facts blended with technology improvements.1)The microprocessor came in the late 70s(1976).This was close to 80.so from here 1ST …

Daily Scrum 10.29

时间越来越紧迫,不过大家逐渐进入了状态。虽然在有些问题上大家意见有些不同,但是最终还都是为着团队着想,很好地达成一致了。 MemberToday’s Task Tomorrow’s Task李孟 task615 测试(活动) task571 完成daily scrum 10.29撰文 task615 测试…

python中list index out of range_Python知识精解:str split()方法

描述split()函数是Python字符串函数。split() 通过指定分隔符对字符串进行切片。如果指定了整型参数num,则仅分隔num 1个子字符串(即分割num次)。使用split()函数将字符串分割后,返回的是一个列表,列表中存储着分割后…

ashx连接mysql_对C#中的web访问mysql数据库的一些知识点进行了整理归纳总结

基本对比使用方式使用场合优缺点是否需要安装需要的dll网址引用方式程序内引用程序初期确定使用MySql,前期添加引用大多数情况下使用在类文件内,多数使用于aspx,ashx等带有后置代码的类文件中可以安装,也可以直接引用dll 多数情况…

mysql -b -e_MySQL 的B+树索引.

一、B树索引概述索引是应用程序设计和开发的一个重要方面。若索引太多,应用程序的性能可能会受到影响(需维护索引的结构和数据);而索引太少,对查询性能又会产生影响。二叉树,左子树的键值总是小于根的键值,右子树的键值…

mysql 5.7 api 中文_mysql5.7怎么解决中文

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

mysql卸载完环境变量还有_MySql完全卸载

这篇文章为转载本博客内容均摘自其他博客,由我整合并且将内容更改的更为详细,方便自己以后观看,也方便各位同学学习,少踩一些坑1.首先我们看一下如何卸载(1)停掉MySql在Windows的服务:开始—> 运行—> services.…

Effective Java学习笔记之第5条 避免创建不必要的对象

第5条 避免创建不必要的对象 一般来说,最好能重用对象而不是在每次需要的时候就创建一个相同功能的对象。 反面例子: String s new String("stringette"); // DONT DO THIS! 对于同时提供了静态工厂方法和构造器都不可变类,通常可…

C_C++变量命名规则

变量命名规则是为了增强代码的可读性和容易维护性。以下为C必须遵守的变量命名规则: 1、 变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成。 2、 第一个字母必须是字母或者下…

pycharm怎么编写python代码_如何设置PyCharm中的Python代码模版(推荐)

在MacOs运行的PyCharm中,执行python文件,如果不指定python文件字符编码会报错:SyntaxError: Non-ASCII character \xe6 in file /Users/yuchao/PycharmProjects/oldboy_python/python_lesson/模块与包/spam.py on line 6,but no encoding dec…

转载——开阔自己的视野,勇敢的接触新知识

在我们公司有buddy制度。每个新员工都会被分配给一个有经验的员工。老员工会在新员工6个月的试用期内给予各种各样的帮助。前几天我被分配到一个新buddy。在和他一起聊天的过程中,明显感觉到他有一些忧虑。“我以前主要做的是c,没做过java,怎…

select与pselect的信号屏蔽

pselect() 函数的原型是:int pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask); 它和 select() 函数基本相同,区别在于两个不同的参数&#xff…

vb访问mysql容易死机_VB访问MySQL

最近研究的东西中, 有一部分涉及到用VB访问MySQL数据库, 今天研究了一下小有收获, 共享出来供大家参考首先下载MySQL 的 ODBC 驱动, 我下载的是 MySQL ODBC 3.51 withoutinstaller 版, 下载后是一zip包, 随便解压到哪, 然后运行 cmd, 定位路径到解压的目录, 然后运行 install.b…