- 论坛徽章:
- 0
|
原帖由 xiaofei104 于 2005-11-6 18:58 发表
1。因为我的Client/Server都是自己写的。所以我的做法是在Client中加了一个钩子去显示的close掉socket.而不是依赖于进程的关闭时候的资源释放。
2。你的情况可以试试将线程设置为守护线程,将socket资源设置为线程内的一个变量,而非一个全局的,在多个线程间共享的。
1."client是否close"和"server上的连接显示established"是没有关系的
就像你说的,连接断了,server是肯定知道的,因为select()的返回是可读,read()的返回是0
2.这个完全没有必要吧,每个处理连接的线程在知道自己所对应的连接断开后,自己可以先close了再退出
我觉得LZ的问题可能在于server对连接的处理流程,你的server是否时刻在监控着这个连接?
比如每个线程的处理可以大体是这样的
- while(1)
- {
- pthread_testcancel();
-
- if(select(..)) //sleep()可以在这里实现
- {
- int ret = read(...);
-
- if(ret < 0) //read()出错
- {
- //
- close(sockfd);
- pthread_exit();
- }
- else if (ret == 0) //连接断开
- {
- //
- close(sockfd);
- pthread_exit();
- }
- else //正确
- {
- //
- }
- }
- }
复制代码
[ 本帖最后由 xujg 于 2005-11-7 09:14 编辑 ] |
|