CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

关闭socket的怪问题

楼主quanbaoxiao(永不言败)2006-03-17 20:12:08 在 VC/MFC / 基础类 提问

这是服务器端的代码,当有客户端进行过通讯这段代码就会出问题,如果没有通讯直接退出就没有问题,服务器会当掉,即没有反应,就好像死掉一样。问题见下面描述  
  case   USERQUIT   :  
  {  
          g_CriticalSec.Lock()   ;  
          CQQServerApp   *pApp   =   (CQQServerApp*)AfxGetApp()   ;  
          POSITION   pos   =   pApp->m_ConSockList.GetHeadPosition()   ;  
        while(pos)  
        {  
  POSITION   PrePos   =   pos   ;  
  CClientSocket   *pSock   =   (CClientSocket   *)pApp->m_ConSockList.GetNext(pos)   ;  
  if(pSock->GetRoom()==m_msg.strRoom   &&   pSock->GetUser()==m_msg.strName)  
  {  
                      pApp->m_ConSockList.RemoveAt(PrePos)   ;  
  pSock->ShutDown()   ;  
   
  pSock->Close()   ;  
  delete   pSock   ;  
  Sleep(50)   ;//如果把sleep去掉当就有问题,或者去掉sleep而把pApp-                                                           //>m_ConSockList.RemoveAt(PrePos)   ;移到这里就没有问题  
   
                      break   ;  
  }  
  }  
  问题点数:30、回复次数:9Top

1 楼quanbaoxiao(永不言败)回复于 2006-03-17 22:02:37 得分 0

自己顶一个Top

2 楼jjiaming(阿熊)回复于 2006-03-18 22:02:52 得分 3

是哪   一句有问题啊,然后是用MFC的CSocket类吗Top

3 楼Mackz(在相互)回复于 2006-03-18 23:05:53 得分 0

g_CriticalSec应该是一个临界区吧,只有Lock()没有UnLock()的?Top

4 楼quanbaoxiao(永不言败)回复于 2006-03-19 00:44:44 得分 0

UnLock()写漏了,在后面有得。  
  是CSocket继承下来得。Top

5 楼Mackz(在相互)回复于 2006-03-19 09:35:41 得分 3

pApp->m_ConSockList.RemoveAt(PrePos)   ;是应该放到delete()后面,也不需要Sleep()。Top

6 楼quanbaoxiao(永不言败)回复于 2006-03-19 12:39:04 得分 0

楼上的大哥,为什么呢?  
  remove之后再delete不是一样吗?remove函数又不会对pSock的地址  
  产生影响的。而且奇怪的是如果remove之后再delete加上个sleep  
  就不会有问题,如果不加就有问题,我想是不是把remove放在后面  
  时执行remove会有延迟,相当于调用了sleep了。但是delete之后为什么  
  要延迟一下呢?  
  Top

7 楼quanbaoxiao(永不言败)回复于 2006-03-19 23:52:17 得分 0

高手怎么都不想助一下啊Top

8 楼quanbaoxiao(永不言败)回复于 2006-03-19 23:52:31 得分 0

高手怎么都不想助一下啊Top

9 楼littlebao(爱拼才会赢)回复于 2006-06-02 12:32:39 得分 24

延迟,让socket内部做处理后在销毁Top

相关问题

  • 关闭socket的怪问题
  • 异步Socket关闭出错
  • 线程关闭后socket连接为何没有关闭!
  • 怎么关闭输出流,不关闭socket连接
  • 关于关闭SOCKET的问题
  • 为什么Socket不能关闭?
  • 关闭Socket的时候弹出异常
  • Socket 异步 关闭问题 急用!!
  • 如何判断socket已经关闭
  • 如何判断socket已经关闭

关键词

  • 延迟
  • sleep
  • consocklist
  • psock
  • prepos
  • papp
  • 问题
  • removeat
  • remove
  • pos

得分解答快速导航

  • 帖主:quanbaoxiao
  • jjiaming
  • Mackz
  • littlebao

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo