SQL Server пропал ошибка из-за WSACleanup

Я хотел бы попросить о помощи, так как я не знаю, что делать дальше. У меня есть симулятор, созданный в C++, где он принимает ввод идентификатора от пользователя и проверяет, находится ли он в базе данных (созданной в MySQL Workbench), который находится только в localhost.

sqlQuery = "SELECT staffaccess.card_number FROM proxycardsim.staffaccess WHERE staffaccess.card_number = " 
            + inputID;

if(mysql_ping(theInstance.connects))
{

}

int queryState = mysql_query(theInstance.connects, sqlQuery);
resultSet = mysql_store_result(theInstance.connects);
rowNum = mysql_num_rows(theInstance.resultSet);

if (rowNum == NULL)                     
{                                       
    mysql_free_result(theInstance.resultSet);
    return false;
}
else
{
    mysql_free_result(theInstance.resultSet);
    return true;
}

Дело в том, что симулятор подключен к другому компьютеру, который служит сервером (подключен через winsock). Если сервер работает, он работает нормально или все входные данные неверны, но если сервер не работает (мой код попытается снова подключиться к серверному ПК, поэтому мне нужно вызвать WSACleanup) после ввода одного правильного значения и ввода другой mysql_query возвращает ошибку, что сервер mysql исчез. Тогда программа сломается, когда перейдет к mysql_num_rows.

У меня есть этот код в другой функции, и когда я закомментировал их один за другим, я обнаружил, что ошибка происходит из-за WSACleanup(). Если строки WSACleanup нет, мой запрос выполняется нормально.

    if ( false == theInstance.compareID(m_IDEntry))
{
    addData(ConsoleLog,rec,0,0);
}
else
{
    // Send an initial buffer
    iResult = send( connectSocket, sendBuf, (int)strlen(sendBuf), 0 );
    if(false == theInstance.addToLog(m_IDEntry))
    {
        addData(ConsoleLog,rec,0,3);
    }

    if (iResult == SOCKET_ERROR) {
        closesocket(connectSocket);
        WSACleanup();
        serverConnect();
        iResult = send( connectSocket, sendBuf, (int)strlen(sendBuf), 0 );
    }

    if (iResult != SOCKET_ERROR) {
        addData(ConsoleLog,rec,0,1);
    }

    iResultRcv = recv(connectSocket, recvbuf, recvbuflen, 0);
    if ( iResultRcv <= 0 ) 
    {
       addData(ConsoleLog,rec,0,7);
    }

}

Я надеюсь, что кто-то может мне помочь.

1 ответ

Решение

Не звоните в WSACleanup. WSACleanup предназначен для использования, когда вы больше не хотите осуществлять какую-либо связь через сокет. Это не так для вас.

Другие вопросы по тегам