При переносе некоторых рабочих модульных тестов с 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()... Сбрасывает ли сброс последние ошибки?
if (error = SOCKET_ERROR)
... - person Steve Townsend   schedule 10.11.2010X_THROW
? Если он сделает какой-либо другой системный вызов, это может сбросить код ошибки. - person casablanca   schedule 10.11.2010GetLastError
илиWSAGetLastError
перед любым другим системным вызовом. - person casablanca   schedule 10.11.2010