一、close()与singa(SIGPIPE,SIG_IGN)的作用
1.Close是什么?
close():释放文件描述符,回收连接资源,避免句柄泄漏
2.SIGPIPE是什么?
SIGPIPE = 管道破裂信号
触发条件:往一个已经断开的连接(socket / 管道)写数据
默认行为:直接杀死进程!
3.SIG_IGN是什么?
SIG_IGN = Signal Ignore → 忽略信号
- 它是一个宏定义 ,代表:收到信号不处理、不崩溃
- 作用:告诉操作系统:这个信号来了直接丢掉,不要影响进程
二、二者在服务器的具体体现
1.close()
在我们的四次挥手中,如果我们的客户端断开连接,但是在服务器处于CLOSE_WIAT状态,由于没有close,所以我们服务器会一直处于CLOSE_WAIT状态,从而导致资源一直在浪费,相当于内存泄漏。
2.singa(SIGPIPE,SIG_IGN)
singal函数在我的文章中Linux分栏里面信号章节介绍过,感兴趣可以看看。
这个函数配上SIGPIPE与SIG_IGN相当于忽略SIGPIPE信号的默认行为。也就是当我们客户端断开,但是我们服务端不小心给与该客户端建立的文件描述符通信时,我们OS会给服务端一个SIGPIPE信号,让其终止该进程。而我们用了该函数相当关于忽略了OS的信号,从而进程不会被终止,要知道我们一个服务器是希望可以长久运行的,不能轻易断开