大家的IOCP的 accept 都是 AcceptEx 么?

CPP2008 2006-06-16 11:00:06
TCP/IOCP/Windows
Console 程序。

我使用 WSAAccept() 发现一个问题,有时候,即使是刚开启服务器,然后client连过来,都有阻塞的情况发生。必须Ctrl+C 才可以把服务器唤醒。

void MainThread()
{
for( ;; )
{
WSAAccept()
}
}

void QueryIOCPStateThread()
{
for( ;; )
{
}
}

这个,确定是 WSAAccept 的问题么?

(我个人是有点怀疑,有经验的朋友帮忙说说。谢谢)
...全文
430 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttii 2006-10-01
  • 打赏
  • 举报
回复
这个函数好像不是这样用的,iocp有三种操作会引起一个异步的io,accpet,read,write,因此完全可以预先开accpet然后放入完成队列中,如果有回应,那么就在工作者线程中处理
DentistryDoctor 2006-06-16
  • 打赏
  • 举报
回复
并会顺便带会收到的第一个数据包。针对WWW一类的需要频繁建立断开连接的情况,性能应该有大的提升。如果Accept操作本身不是很频繁的话,对性能影响不大。
DentistryDoctor 2006-06-16
  • 打赏
  • 举报
回复
偶用的是AcceptEx,AcceptEx可以让Accept操作也异步完成。
萧山夜雨 2006-06-16
  • 打赏
  • 举报
回复
不开线程在main里阻塞也行,但不是太好,比如将来移植到窗口程序上,就要改很多代码,
另开一线程吧。
萧山夜雨 2006-06-16
  • 打赏
  • 举报
回复
刚看了一下, WSAAccept()用法和Accept的用法非常类似,阻塞方式接受一个连接,因此也要开一个线程。
CPP2008 2006-06-16
  • 打赏
  • 举报
回复
我的是console程序,直接在main里循环 WSAAccept()

还有必要再开一个 AcceptThread 么?
萧山夜雨 2006-06-16
  • 打赏
  • 举报
回复
accept和acceptEx都可以,
accept需要多开启一个线程。
Ex的可以省一个线程,但在工作线程中多出一项switch case 因为ex投递了操作。

wsaAccept的没用过。
CPP2008 2006-06-16
  • 打赏
  • 举报
回复
To Delphityro:

你说的有道理,但因为我需要打印输出运行逻辑线,所以,喜欢console。
如果用窗口的话,相对来说难一点找到错误发生处。


to DentistryDoctor:

我也想改为 AcceptEx,今天就试下。

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧