adias 发表于 2010-12-22 12:21:51

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

求助论坛诸位:
Practor模式的ACE_Asynch_Write_Stream的write函数,有没有可能因为TCPbuffer满而返回失败-1,如果会的话怎么得到失败理由,google了许久都没有答案,谢谢诸位。

modern 发表于 2010-12-22 13:31:27

getlasterror

freeeyes 发表于 2010-12-22 15:56:05

ACE_Asynch_Write_Stream的Write的时候,实际并不是写入发送堆栈,只是把你的数据放入一个队列,在这个队列,异步程序会有一个线程负责帮你发送数据。填充数据如果过多会引起BLOCK,会在handle_write_stream()事件中返回数错误类型。

adias 发表于 2010-12-22 16:29:47

谢谢版主 那再进一步问一下,如果满了是EAGAIN错误吗

freeeyes 发表于 2010-12-22 17:37:13

你报的错误ID是什么?贴出来。

adias 发表于 2010-12-22 18:48:41

谢谢freeeyes版主,没有错误ID,我只是请教这个流程,如果会buff满而发送失败那就需要重新发送,目前没有做测试,也不知道怎么才能将buffer填满。
至于您说的handle_write_stream返回错误请问怎么获取,有没有相关的资料可以参考呢,非常感谢

wuyudry 发表于 2010-12-25 08:17:34

异步写缓存满的时候,你再写的时候会返回
WSAENOBUFS    if (this->writer_.write (mb, mb.length ()) == -1)
    {
      mb.release ();
      ACE_ERROR_RETURN ((LM_ERROR,
                           "%p\n",
                           "ACE_Asynch_Write_Stream::write error "),
                           -1);
    }比如上面,你日志会打印“no buffer space available”。

adias 发表于 2010-12-29 15:05:33

感谢楼上wuyudry指点
页: [1]
查看完整版本: [求助]Practor模式ACE_Asynch_Write_Stream的write问题