找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3998|回复: 2

使用Reactor框架时handle_input遇到的问题

[复制链接]
发表于 2008-1-6 16:46:42 | 显示全部楼层 |阅读模式
在学习马维达翻译的中篇《ACE程序员教程》中第6章Reactor时,按照上面写了MyAcceptHandler和MyInputHandler
  1. int MyInputHandler::handle_input(ACE_HANDLE fd)
  2. {
  3. ACE_DEBUG((LM_DEBUG, "Receive message"));
  4. peer_.recv_n(buffer, BUFFERSIZE);
  5. ACE_DEBUG((LM_DEBUG, "%s\n", buffer));
  6. buffer[0] = '\0';
  7. //keep register with reactor
  8. return 0;
  9. }
复制代码
结果在客户端调用
  1. stream.send_n(msg1, 6);
  2. stream.close();
复制代码
最后int MyInputHandler::handle_input(ACE_HANDLE fd)会调用两次,但是第二次什么也收不到
在客户端这样调用
  1. stream.send_n(msg1, 6);
  2.   stream.send_n(msg2, 6);
  3. stream.close();
复制代码
结果和上面的情况一样,只能收到msg1, msg2收不到,但是handle_input也会调用两次,而第二次什么也收不到。
 楼主| 发表于 2008-1-6 16:46:53 | 显示全部楼层
stream.close();你的调用,导致handle_input返回了。去掉这个调用试试。
 楼主| 发表于 2008-1-6 16:47:01 | 显示全部楼层
第二次调用会返回0,表示对方关闭了此socket
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-25 02:07 , Processed in 0.012154 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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