高手赐教: 基于ACE的服务器为何不能连续收包

xmouse 2006-11-20 11:47:09
我在SUSE Linux 10.0/g++ 4.03下编译安装ACE 5.5 运行自带的Proactor测试程序exsample/Reactor/Proactor/test_proactor2.cppy一切正常:在两个进程分别启动测试程序作为服务器和客户端,服务器可以正常收包、回写,然后继续收包,起大致流程是:read stream -> handle read -> write back -> handle write -> read stream ... (循环)

我将handle_read_stream()函数中的回发部分的代码注释掉,想是服务器不讲收到的包发回服务器而继续接受来自客户端的信息,代码如下
void Receiver::handle_read_stream (...)
{
...
if ( result.success () && result.bytes_transferred () != 0)
{
//////////////////////////////////////////////////////////////////
// if(this->initiate_write_stream (result.message_block (),
// sult.bytes_transferred () ) == 0 )
//////////////////////////////////////////////////////////////////
{
if ( duplex != 0 )
{
// Initiate new read from the stream.
this->initiate_read_stream () ;
}
}
}
else
...
}

但服务器在收到第一个包后(程序在打开端口后首先执行一次ACE_Asynch_Read_Stream的读操作),不能继续收包,在其他ACE论坛上看到大部分Linux对异步IO支持的不好(测试程序使用的是ACE_POSIX_SIG_Proactor),但鉴于修改前的原始测试程序仍然可以正常运行,是否可以排除SUSE Linux对异步IO支持不好的因素,那么问题出在哪里呢,如何不进行交替读写,使服务器连续收包?

注:上述修改后的测试代码可以在Windows下(ACE_WIN32_Proactor)测试通过,连续收包。
...全文
225 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lamputa_lito 2006-11-24
  • 打赏
  • 举报
回复
很鄙视vcclass(黑山老妖) 这种人。好似ACE跟他有仇似的。看了一个礼拜搞不掂就到处发牢骚,也太。。。了吧!
acejoy 2006-11-24
  • 打赏
  • 举报
回复
to 楼上,你自己不会就说不好,这种思想要不得哦。

楼主的问题,应该是需要持续的投递读写信号才能使用。
vcclass 2006-11-23
  • 打赏
  • 举报
回复
用ACE你还会碰到很多的类似的问题,搞得你都没有办法解决,把ACE的问题解决,你用API到早项目完成了。还学会了网络编程,你用ACE的话,你离开了ACE你就不会网络编程了,还得从头学,不值得呀。这个垃圾东西是忽悠人的。
xmouse 2006-11-23
  • 打赏
  • 举报
回复
?
xmouse 2006-11-21
  • 打赏
  • 举报
回复
没人知道吗
xmouse 2006-11-20
  • 打赏
  • 举报
回复
自顶

4,354

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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