Win32 :: shutdown()返回-1,但WSAGetLastError()返回0?

时间:2010-11-10 17:33:18

标签: winapi winsock2

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

调用shutdown的代码如下所示:

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

当我捕获异常时,我调用所有那些GetLastError()函数...抛出重置最后的错误?

1 个答案:

答案 0 :(得分:2)

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