在Linux下编写TCP socket程序时候,如何客户端突然退出,导致连接中断这时候服务端用send函数发送数据的话,会导致整个进程退出。
如果是服务端端口,客户端调用send不会导致进程退出。
为什么会这样?
因为服务端尝试调用disconnected socket进行send数据时,会让底层抛出一个信号SIGPIPE,这个信号的默认处理方法就是退出进程。
解决方法:
1.重新定义一个信号处理方法,覆盖系统默认处理方法。
2.修改send函数的最后一个参数,将最后一位flags设置为MSG_NOSIGNAL。
这样进程不退出,只需要判断send的返回值是否小于或等于0,就知道send函数是否成功。
https://www.cnblogs.com/wuyepeng/p/9801470.html