当前位置: 技术问答>linux和unix
TCP 服务器端关闭客户端句柄问题
来源: 互联网 发布时间:2016-09-09
本文导语: 各位大侠不吝赐教,我现在使用LINUX编制了一个TCP的服务器软件(基于ARM9平台),创建一个线程accept获取多个客户端连接的socket句柄clientfd[i],使用心跳信号维持和客户端的通信,在发现某个客户端异常断开之后,...
各位大侠不吝赐教,我现在使用LINUX编制了一个TCP的服务器软件(基于ARM9平台),创建一个线程accept获取多个客户端连接的socket句柄clientfd[i],使用心跳信号维持和客户端的通信,在发现某个客户端异常断开之后,使用shutdown(clientfd[i], 2)关闭此连接,以备下一次该客户端启动时能够重新连接上,但是我发现调用shutdown之后整个进程就退出,我现在是多线程,主线程是一个while(1),按道理来讲不应该退出,不知道什么原因,请各位帮忙!
如果改用close函数虽然不会使整个进程退出但是客户端重新启动连接之后无法正常的通信。
有什么办法发现客户端连接断开之后正确的在服务器端做清理吗?为什么shutdown会使整个进程退出?
如果改用close函数虽然不会使整个进程退出但是客户端重新启动连接之后无法正常的通信。
有什么办法发现客户端连接断开之后正确的在服务器端做清理吗?为什么shutdown会使整个进程退出?
|
忽略信号试试
signal(SIGPIPE, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
|
shutdown本身并不会使整个进程退出,
先用core文件分析一下是在哪里退出再说。
编译参数加-g选项,
ulimit -c 4096
gdb youprogram -c core.*
先用core文件分析一下是在哪里退出再说。
编译参数加-g选项,
ulimit -c 4096
gdb youprogram -c core.*