Win32 :: shutdown () возвращает -1, а WSAGetLastError () возвращает 0? - PullRequest
2 голосов
/ 10 ноября 2010

При переносе некоторых рабочих юнит-тестов с 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 Ответ

2 голосов
/ 11 ноября 2010

В конечном итоге ответ состоял в том, что почти любые системные вызовы могут очистить ошибки Win32 "LastError ()" ... В моем случае создание исключения означало форматирование и запись сообщения, что приводило к устранению ошибки ...несмотря на то, что я сразу вызывал WSAGetLastError () в своем улове (...), было уже слишком поздно ...

...