找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 8700|回复: 7

[求助]Practor模式ACE_Asynch_Write_Stream的write问题

  [复制链接]
发表于 2010-12-22 12:21:51 | 显示全部楼层 |阅读模式
求助论坛诸位:
Practor模式的ACE_Asynch_Write_Stream的write函数,有没有可能因为TCPbuffer满而返回失败-1,如果会的话怎么得到失败理由,google了许久都没有答案,谢谢诸位。
发表于 2010-12-22 13:31:27 | 显示全部楼层
getlasterror
发表于 2010-12-22 15:56:05 | 显示全部楼层
ACE_Asynch_Write_Stream的Write的时候,实际并不是写入发送堆栈,只是把你的数据放入一个队列,在这个队列,异步程序会有一个线程负责帮你发送数据。填充数据如果过多会引起BLOCK,会在handle_write_stream()事件中返回数错误类型。
 楼主| 发表于 2010-12-22 16:29:47 | 显示全部楼层
谢谢版主 那再进一步问一下,如果满了是EAGAIN错误吗
发表于 2010-12-22 17:37:13 | 显示全部楼层
你报的错误ID是什么?贴出来。
 楼主| 发表于 2010-12-22 18:48:41 | 显示全部楼层
谢谢freeeyes版主,没有错误ID,我只是请教这个流程,如果会buff满而发送失败那就需要重新发送,目前没有做测试,也不知道怎么才能将buffer填满。
至于您说的handle_write_stream返回错误请问怎么获取,有没有相关的资料可以参考呢,非常感谢
发表于 2010-12-25 08:17:34 | 显示全部楼层
异步写缓存满的时候,你再写的时候会返回
WSAENOBUFS
  1.     if (this->writer_.write (mb, mb.length ()) == -1)
  2.     {
  3.         mb.release ();
  4.         ACE_ERROR_RETURN ((LM_ERROR,
  5.                            "%p\n",
  6.                            "ACE_Asynch_Write_Stream::write error "),
  7.                            -1);
  8.     }
复制代码
比如上面,你日志会打印“no buffer space available”。
 楼主| 发表于 2010-12-29 15:05:33 | 显示全部楼层
感谢楼上wuyudry指点
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-22 21:02 , Processed in 0.017040 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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