IOCP投递ConnectEx的问题

u010038899 2015-04-30 02:19:44
我的应用作为客户端,借助IOCP实现。
问题1:测试时发现,如果服务器端先启动,则客户端投递ConnectEx后,工作者线程会收到连接建立的消息,一切正常;而如果客户端先启动,并且投递ConnectEx的时候服务器端还没有启动,则该投递会导致工作者线程的GetQueuedCompletionStatus()调用立即返回,并产生一个1225的错误代码。这和我预想的行为不一样啊,我以为客户端投递一次ConnectEx()就万事大吉了,坐等连接成功即可。这样的话岂不是要单开一个线程,投递失败的话反复投递才行?有没有办法能让ConnectEx一直干活直到连上。

问题2:(这个和题目关系不大)如何检测连接的异常中断,比如网线拔掉,或者服务器端异常退出(没有第四次握手就拜拜)。

谢谢
...全文
339 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2015-07-23
  • 打赏
  • 举报
回复
ConnectEx在工作者线程的GetQueuedCompletionStatus()1225错误时,创建一个定时器,定时时间到,重新尝试投递连接,定时器在投递连接后立即销毁
WinEggDrop 2015-07-23
  • 打赏
  • 举报
回复
你服务都没启动,你还想指望ConnectEx()能连接上吗?你用浏览器打开一个不存在的网站,能打开吗?
u010038899 2015-04-30
  • 打赏
  • 举报
回复
我的应用程序需要建4个套接字,分别连接4个不同的服务器。而且有一个传输的数据量挺大的。不想用select模式了。几个异步模式感觉都挺麻烦的,索性麻烦个够算了。谁有好的框架,给个链接。谢谢
xian_wwq 2015-04-30
  • 打赏
  • 举报
回复
1.投递失败,就必须继续投递,否则连接动作就没有发起者了 如果对于性能要求不是很苛刻, 采用同步方式连接都可以。 ---------- 多说一句:个人感觉客户端使用iocp构建,有些杀机用牛刀的感觉。 2.客户端启用重连线程是必须的 包括超时异常、通讯异常等情况,都需要使用重连线程来处理
wushuang443 2015-04-30
  • 打赏
  • 举报
回复
这种情况肯定要设计一个重连机制,在说,服务端都没连上,你客户端就去连接,这肯定不行咯。

18,356

社区成员

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

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