zoukankan      html  css  js  c++  java
  • MySQL 连接中 IP 或端口错误导致连接超时的一种解决方案

      在 Visual Studio 中调用 mysql_real_connect() 函数连接 MySQL 过程中,当仅有连接 IP 错误时,会存在大概 20 秒的连接超时,最后连接失败;当有连接端口错误时,会存在大概 60 秒连接超时,最后连接失败。

      通过在 mysql_real_connect() 前配置以下函数:

      mysql_options(handle, MYSQL_OPT_CONNECT_TIMEOUT, timeOut)

      但并不能成功在超时时间之后,结束连接请求。

      这里提供一种线程解决方案,如下:

          

     1  struct MySqlConnOpts_t
     2  {
     3       MYSQL* pConnHandle;
     4       std::string strIp;
     5       std::string strUserName;
     6       std::string strPassWord;
     7       int nPort;
     8       int nErrNum;
     9   
    10       MySqlConnOpts_t()
    11       {
    12          pConnHandle = NULL;
    13          strIp = "";
    14          strUserName = "";
    15          strPassWord = "";
    16          nPort = -1;
    17          nErrNum = -1;
    18       }
    19  };
    20  
    21  MySqlConnOpts_t* pConnectOptions = new MySqlConnOpts_t;
    22 
    23  if(NULL != pConnectOptions)
    24  {
    25       // 进行 pConnectOptions 中 pConnHandle、strIp、strUserName、strPassWord、nPort 的配置操作;
    26  }
    27  else
    28  {
    29      // 内存申请失败操作;
    30  }
    31 
    32  
    33  DWORD WINAPI mysqlConnect(LPVOID lpParam)
    34  {
    35      DWORD ret = 0;
    36      MySqlConnOpts_t* pConnOpts = static_cast<MySqlConnOpts_t*>(lpParam);
    37  
    38      if(NULL == mysql_real_connect(pConnOpts->pConnHandle, pConnOpts->strIp , pConnOpts->strUserName, pConnOpts->strPassWord, pConnOpts->nPort, NULL, CLIENT_MULTI_STATEMENTS))
    39      {
    40            ret = -1;
    41      }
    42  
    43      pConnOpts->nErrNum = ret;
    44  
    45      return ret;
    46  }
    47 
    48  const int nTimeOut = 1000;  // 超时设置,单位为 ms;
    49  HANDLE hThread = CreateThread(NULL, 0, mysqlConnect, pConnectOptions, 0, NULL);
    50  DWORD dwRet = WaitForSingleObject(hThread, nTimeOut);
    51  CloseHandle(hThread);
    52  
    53  if(0 != dwRet)
    54  {
    55      // 处理超时逻辑;
    56  }
    57  
    58  if(0 != pConnectOptions->nErrNum)
    59  {
    60      // 处理错误连接逻辑
    61  }
    62  
    63  // 处理 pConnectOptions 指针;

       可以解决连接超时问题。

  • 相关阅读:
    数独
    面向对象程序设计课第七次作业
    面向对象程序设计课第六次作业
    软件工程课总结
    第四次作业:四则运算界面
    psp记录个人项目花费时间
    作业三:代码规范,代码复查
    编写一个能生成小学四则运算题目的运算
    目前流行的源程序版本管理软件和项目管理软件有哪些?有什么优缺点
    课程进度总结
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/12172795.html
Copyright © 2011-2022 走看看