playar 发表于 2010-2-9 10:28:11

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

首先说明,并不是要求实时得到客户端断开的问题。:)

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

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

ACE的Proactor下如何知道客户端断开?谢谢。

winston 发表于 2010-2-9 11:08:41

你可以在本站查到解答。基本是这样的:
客户端断开,你可以在handle_read_stream收到错误信息。但是前提是,你提前预读了数据。

playar 发表于 2010-2-9 11:15:58

谢谢回答

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

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

我再去查查,如果查不到,麻烦您不宁赐教。

wishel 发表于 2010-2-9 11:31:31

不停read,直到handle_read_stream读到result为错误或者0 size数据,表示对方主动close

playar 发表于 2010-2-9 18:11:52

此问题已经解决,谢谢各位

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

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

请教了,谢谢!

winston 发表于 2010-2-9 21:54:20

当然能知道了。Proactor的acceptor里面会创建链接处理对象的。看看C++网络编程卷2,一看便知。
页: [1]
查看完整版本: proactor模式下,如何知道客户端断开?