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