找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3705|回复: 5

这到底什么机制!

[复制链接]
发表于 2010-10-12 15:40:46 | 显示全部楼层 |阅读模式
int
Supplier_Handler::handle_input (ACE_HANDLE)
{
   char buf[BUFSIZ];
  ssize_t received = this->peer ().recv (buf, sizeof buf);

  switch (received)
    {
    case -1:
      this->state (Connection_Handler::FAILED);
      ACE_ERROR_RETURN ((LM_ERROR,
                        "(%t) Peer has failed unexpectedly for Client_Handler %d\n",
                        this->connection_id ()),
                        -1);
      /* NOTREACHED */
    case 0:
      this->state (Connection_Handler::FAILED);

      
      ACE_ERROR_RETURN ((LM_ERROR,
                        "(%t) Peer has shutdown unexpectedly for Client_Handler  %d\n",
                        this->connection_id ()),
                        -1);
      /* NOTREACHED */
    default:
           ACE_DEBUG((LM_DEBUG,"(%t) from %d: %s %d \n",connection_id_,buf,received));
           return 0;
    }
}
为什么当对面连接关闭的时候,调用handle_input时候,buf字符组不是空,还是上次收到的字符值!
发表于 2010-10-12 16:09:04 | 显示全部楼层
char buf[BUFSIZ];
改成
char buf[BUFSIZ] = {'\0'};
 楼主| 发表于 2010-10-12 17:35:35 | 显示全部楼层
回复 2# freeeyes


    那为什么第二次调用的时候 (buf为局部对象,应该为空阿),怎么还存储上次的字符呢?
发表于 2010-10-12 23:05:26 | 显示全部楼层
局部变量不一定都是空(0值),你应该在用之前初始化,然后再看调用完毕后是什么值,否则一个没有初始化的内存有可能是脏数据。
 楼主| 发表于 2010-10-13 11:06:55 | 显示全部楼层
xiexie le!!!!
 楼主| 发表于 2010-10-13 11:09:15 | 显示全部楼层
顺便问问:ACE_NOTREACHED这个有什么用?
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-22 16:54 , Processed in 0.023015 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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