建议把server从client收数据的那几句贴出来。
多打一些log,确认下到底是哪一步错了。client挂掉不太可能会导致server也挂掉,我觉得应该是你的实现逻辑有错,比如说recv返回了-1(所以要打log),然后你没有做好判断,直接 buf[ret] = '\0' 写了错误的内存导致崩溃。
另外,开启coredump可以帮助你调试。例如执行ulimit -c 1024,然后用gcc/g++加上-g编译,再用gdb载入server崩溃产生的core文件,执行bt命令看看是哪一句出错了。