1、该问题主要是由于向关闭的socket发送数据产生,即调用send函数发送数据
2、向关闭的socket发送数据时,当发送缓冲区未满时,send函数返回的值仍然大于0,当发送缓冲区已满时,返回-1
3、向关闭的socket两次调用send函数时,会产生SIGPIPE信号,该信号的默认处理方式是结束socket所在线程
4、解决方案
(1)调用signal(SIGPIPE,SIG_IGN);函数忽略SIGPIPE信号
(2)调用send函数时,指定flag=MSG_NOSIGNAL,即send(clientSocket,buf,len,MSG_NOSIGNAL);
时间: 2024-10-18 11:37:12