При переносе некоторых тестов рабочего модуля с Linux на Windows я столкнулся с какой-то странной проблемой. Похоже, что когда мои тесты идут на завершение работы сокета сервера, shutdown() возвращает -1, но WSAGetLastError() возвращает 0 (и getsockopt (с SO_ERROR) возвращает 0, а GetLastError() возвращает 0) ... Итак, выключение () говорит мне, что есть ошибка, но все обычные вызовы, чтобы увидеть, что эта проблема, возвращаются «без проблем!» ... Кто-нибудь когда-либо видел это раньше?Win32 :: shutdown() возвращает -1, но WSAGetLastError() возвращает 0?
Код, который вызывает отключение выглядит следующим образом:
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)' ... –
Что делает 'X_THROW'? Если он вызывает другой системный вызов, это может привести к сбросу кода ошибки. – casablanca
Глядя на X_THROW(), я не вижу в этом ничего, что могло бы устранить ошибку ... Он просто регистрирует ошибку через наш регистратор (который на окнах, пишет сообщение в файл), а затем создает объект исключения и throw's it ... наш объект исключения наследуется от std :: exception .. – dicroce