close(clifd);
pthread_exit(NULL);
}
}
执行结果如下:
过程分析,
1. 先执行服务端程序,然后运行客户端程序,客户端程序强制退出(通过快捷键ctrl+c),服务端client_thread中write返回-1,线程正常退出。
2. 这时候服务端程序还阻塞在accpet等待下一次的客户端连接请求,运行新的客户端程序,然后强制退出客户端,发现服务端进程居然直接退出了!
咋办啊!感觉代码没有任何问题了,为啥还会出错,虽然很明确一定是write的时候没能写进客户端导致的进程奔溃,但是却无从下手。
(注意:为了解决这个问题,笔者绞尽脑汁修改,比如添加
shutdown(clifd, SHUT_RDWR);
又或者添加getsockopt来实时获取连接状态
)效果都不佳,无法解决问题。
###3. 添加捕获异常来再次加强容错机制
绞尽脑汁似乎没有什么效果,抓耳挠腮看看吧,好好翻翻书,看看能不能找到灵感。
从网上找到一本和UNIX系统编程有关的书籍《UNIX环境高级编程_第二版中文》,因为android是基于linux开发的操作系统,linux又是从UNIX那边衍射出来的,
所以linux系统编程这块参考这本书特别靠谱。
看到一个和信号有关的章节&#