2

在将一些工作单元测试从 Linux 移植到 Windows 时,我遇到了一个奇怪的问题。看来,当我的测试关闭服务器套接字时,shutdown() 返回-1,但 WSAGetLastError() 返回 0(并且 getsockopt( 带有 SO_ERROR ) 返回 0,并且 GetLastError() 返回 0 )...所以,shutdown( ) 告诉我有一个错误,但是所有查看问题所在的正常调用都返回“没问题!”......以前有人见过吗?

调用shutdown的代码如下:

int ret = ::shutdown( _sok, mode );
if( ret < 0 )
    X_THROW(( XSDK::ModuleId, XSDK::F_OS_ERROR, "Unable to shutdown socket."));

当我捕捉到异常时,我会调用所有这些 GetLastError() 函数...... throwing 会重置最后的错误吗?

4

1 回答 1

2

答案最终是几乎任何系统调用都可以清除 Win32 的“LastError()”错误......在我的情况下,抛出异常意味着格式化和记录一条消息,这导致错误被清除......即使我在我的 catch(...) 中立即调用 WSAGetLastError() 已经太晚了...

于 2010-11-10T22:51:40.840 回答