peakzhang 发表于 2007-12-13 00:07:06

求个位大哥帮帮我!ACE_OS:last_error的问题


if (peer.recv(recv_data, 9, &x_timeout) == -1)
   {
      if (ACE_OS::last_error() == ETIME)
      {
      }else
      {
       }
}

为什么我在Debug中 ACE_OS::last_error()返回的错误码是超时, 而在Release中返回的是0呢?有谁知道为什么呀?急!!!!!!!!!~~~~~~~~~

peakzhang 发表于 2007-12-13 00:07:17

找到解决办法了.
在接收数据调用超时时,调用ACE_DEBUG((LM_DEBUG, "errno:%d:%m\n")
会出现errno:0:time out输出消息,从ACE_Log_Msg::log的源代码中可以看出在这里是获得了正确的
errno的,ACE_OS::last_error()不能获得正确的值估计是编译器优化掉了。
将config.h中的内容修改如下:
#define ACE_NO_INLINE
#include "ace/config-win32.h"

重新编译ACE,阻止release版本将ACE_OS::last_error()作为内联函数,问题就解决了。

但是还是不明,编译器怎么优化造成不能获得errno值。
页: [1]
查看完整版本: 求个位大哥帮帮我!ACE_OS:last_error的问题