现象-客户端:
[1]+ Broken pipe /app_exe
从客户端的log看出进程是在2020-07-17 00:53:07.213退出的。
服务器端的log可以看出它在前2秒的时间关闭了socket。
原因:
Broken pipe:管道已经断开。即对端将这个读/写管道关闭了。
tcp的对端发送了FIN序号,告诉你我这个管道已经关闭,这时候,如果你继续往管道里写数据,第一次,你会收到一个远端发送的RST信号,如果你继续往管道里write数据,操作系统就会给你发送SIGPIPE的信号,并且将errno置为Broken pipe
如果你的程序没有对SIGPIPE进行处理,默认处理是进程会中断退出。
解决:
添加信号处理函数
static void signal_handle(int signo)
{
printf("Ignal SIG_PIPE signa\n");
}
signal(SIGPIPE, signal_handle);