为什么要将SIGPIPE信号设置为SIG_IGN(忽略该信号)
当客户端发起close()命令后会向服务端发送FIN包,不再接受和发送数据,服务端接收到信息后还可以向客户端发送数据,此时发送数据到客户端就会产生SIGPIPE信号,默认产生该信号会关闭进程,所以我们要将该信号的处理方式设置为忽略
为什么要设置端口复用
a、客户端和服务端关闭连接后并不会立马真的变成close状态,在2个MSL时间内会一直处于TIME_WAIT状态,在这段时间里若我们再使用该端口连接,会显示端口被占用
b、可以使得多个socket绑定同一个地址的同个端口来接受数据
为什么要对socket设置EPOLLONESHOT
无论epoll处于LT模式还是ET模式下,一个socket上的某个事件都可能会被触发多次。这在并发编程中会引起一个问题,比如一个线程在读取完某个socket上的数据后开始处理数据,而在处理数据的过程中又触发可读事件,这样会有另外一个线程读取新的数据,这样就会出现两个线程同时操作一个socket的问题
什么是EINTR 信号
即系统在处理过程中由于收到某个信号从而中断当前操作去做信号处理后返回时的错误