使用完成端口模型,并用
WSAEventSelect(m_ListenSocket, m_hEvent, FD_ACCEPT);为监听端口设定了事件.
然后通过AcceptEx发起了10个连接.
可是当这10个连接用完后,在另一个线程中
WaitForSingleObject(m_hEvent, 10000)却等不到事件通知,而这时client也建立不了新的连接了.
而且也不是永远都收不到,偶而能收到,但没找到什么规律.我现在只好在线程中用循环来检测,这样效率非常低.不知道有哪位朋友遇到过这个问题.

解决方案 »

  1.   

    AcceptEx发起了10个连接.
    --------------每当一个连接建好后,你要相应的投递一个AcceptEx请求,否则10个连接后,你就不能接受新连接了。
      

  2.   

    楼上的,我是用事件来判断的,而不是像你说的那样,你说的那种方式,我还不如直接调用Accept方法呢.
      

  3.   

    楼主,PlatformSDK中有一个用AcceptEx实现的IOCP的例子。偶的IOCP就是从那来的。
      

  4.   

    啊,事件可以解决的啊。
    我就是用的 WSAEventSelect。
    一定是你哪里出错了。当先期提交的10个 AcceptEx 完成后,就触发 FD_ACCEPT ,
    我猜是你的 ListenThread 里写Waitfor.. 然后,还要分辨网络事件 这里的不大对。dw = ::WSAWaitForMultipleEvents(sizeof(E_)/sizeof(E_[0]), 
    E_, 
    TRUE, 
    20000,         FALSE);//等待到了一个事件
    if(dw == WSA_WAIT_EVENT_0)
    {
       //分辨事件
       if(..)
       {}
    }