找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4629|回复: 5

proactor模式下,如何知道客户端断开?

[复制链接]
发表于 2010-2-9 10:28:11 | 显示全部楼层 |阅读模式
首先说明,并不是要求实时得到客户端断开的问题。:)

在reactor下,客户端断开的时候,handle_close可以处理断开消息,

但是在Proactor下,如何得知客户端已经断开连接?是在哪个回调里处理呢? 我试了handle_read_stream,在客户端断开的时候,也并没有消息。这一点,和asio貌似是不同的。

ACE的Proactor下如何知道客户端断开?谢谢。
发表于 2010-2-9 11:08:41 | 显示全部楼层
你可以在本站查到解答。基本是这样的:
客户端断开,你可以在handle_read_stream收到错误信息。但是前提是,你提前预读了数据。
 楼主| 发表于 2010-2-9 11:15:58 | 显示全部楼层
谢谢回答

我也是查了不少网络的资料,结果都没有错误处理部分,才有此疑问

看来是少了预读数据的处理

我再去查查,如果查不到,麻烦您不宁赐教。
发表于 2010-2-9 11:31:31 | 显示全部楼层
不停read,直到handle_read_stream读到result为错误或者0 size数据,表示对方主动close
 楼主| 发表于 2010-2-9 18:11:52 | 显示全部楼层
此问题已经解决,谢谢各位

但同时又有一个新的问题,就是如何得知有客户端连接上来?

我现在测试的是ACE自带的例子proactor test,这个例子只有在客户端发送数据的时候,才会触发到open和handle_read_stream
如果客户端不主动发数据就无法得之客户端连上来

请教了,谢谢!
发表于 2010-2-9 21:54:20 | 显示全部楼层
当然能知道了。Proactor的acceptor里面会创建链接处理对象的。看看C++网络编程卷2,一看便知。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 17:55 , Processed in 0.022875 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表