问题如下:
一个socket数组,接受不同的连接,对本机而言不存在假死现象,其他局域网机子连接,过程很慢,大概要10秒钟左右,这个过程界面是假死的.我采用的是异步模式,应该不存在阻塞现象吧? 想不明白为什么会假死.代码没在家里机子,没办法贴,大家给我点原理性东西就可以 我自己调试

解决方案 »

  1.   

    要不你再创建一个这样的线程,当界面假死的时候,在sleep处打断点,然后VC打开调试中的线程面板,看看各个线程的调用堆栈while( !g_bExit)
    {
     sleep(10) ;
    }
      

  2.   

    是connect的原因 , 因为必须要等到时间后才能返回..最长可能达5分钟以上.....建议connect前先测试 线路是否相同, 也可以用ping...==.
      

  3.   

    或者自己从 Winsock 开始封装的话,可以自己定义 连接 超时,发送超时、接收超时,等等的。
    只不过,你需要自己进行封装。
      

  4.   

    Use worker thread for TCP/IP communication.
      

  5.   

    怎么测试线路那? 用ping不合适吧? 能不能说详细点啊?
      

  6.   

    俺专门开个线程处理连接
    me too
      

  7.   

    处理socket连接应该另起一个工作线程,不要在主线程做,否则就会影响界面的消息处理。
      

  8.   

    楼主说了使用非阻塞模式了。所以,这个说法肯定不存在了。
    非阻塞模式的connect是没有任何等待,是否connect成功还需要另外判断的。
      

  9.   

    一切 connect,accept,send,recv 等操作不管同步异步,都不能在主线程中。需要注意的是 connect
      

  10.   

    ,一个ListenThread()和一个SendThread(),为什么当客户端连接时,总是错误10038 意思是无效的socket未连接 而客户端显示是连接成功
    ListenThread()伪代码如下
    ListenThread()
    {
       S[i]=accetp(s1,....); 
       if(s[i]==INVALID_SOCKET)//在这个地方出问题,如果在线程外正常
         {
                .....
         }
    }
      

  11.   

    参考Microsoft SDK\samples\netds\WinSock\iocp\IocpServer.Cpp