mysql中连接超时的单位是,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 // pConnectOptions 中 pConnHandle、strIp、strUserName、strPassWord、nPort 的初始化;

23

24 DWORD WINAPI mysqlConnect(LPVOID lpParam)

25 {

26 DWORD ret = 0;

27 MySqlConnOpts_t* pConnOpts = static_cast(lpParam);

28

29 if(NULL == mysql_real_connect(pConnOpts->pConnHandle, pConnOpts->strIp , pConnOpts->strUserName, pConnOpts->strPassWord, pConnOpts->nPort, NULL, CLIENT_MULTI_STATEMENTS))

30 {

31 ret = -1;

32 }

33

34 pConnOpts->nErrNum = ret;

35

36 return ret;

37 }

38

39 const int nTimeOut = 1000; // 超时设置,单位为 ms;

40 HANDLE hThread = CreateThread(NULL, 0, mysqlConnect, pConnectOptions, 0, NULL);

41 DWORD dwRet = WaitForSingleObject(hThread, nTimeOut);

42 CloseHandle(hThread);

43

44 if(0 != dwRet)

45 {

46 // 处理超时逻辑;

47 }

48

49 if(0 != pConnectOptions->nErrNum)

50 {

51 // 处理错误连接逻辑

52 }

53

54 // 处理 pConnectOptions 指针;

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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 MySqlConnOpts_t()

10 {

11 pConnHandle = NULL;

12 strIp = "";

13 strUserName = "";

14 strPassWord = "";

15 nPort = -1;

16 nErrNum = -1;

17 }

18 }

19

20 MySqlConnOpts_t* pConnectOptions = new MySqlConnOpts_t;

21 // pConnectOptions 中 pConnHandle、strIp、strUserName、strPassWord、nPort 的初始化;

22

23 DWORD WINAPI mysqlConnect(LPVOID lpParam)

24 {

25 DWORD ret = 0;

26 MySqlConnOpts_t* pConnOpts = static_cast(lpParam);

27

28 if(NULL == mysql_real_connect(pConnOpts->pConnHandle, pConnOpts->strIp , pConnOpts->strUserName, pConnOpts->strPassWord, pConnOpts->nPort, NULL, CLIENT_MULTI_STATEMENTS))

29 {

30 ret = -1;

31 }

32

33 pConnOpts->nErrNum = ret;

34

35 return ret;

36 }

37

38 const int nTimeOut = 1000; // 超时设置,单位为 ms;

39 HANDLE hThread = CreateThread(NULL, 0, mysqlConnect, pConnectOptions, 0, NULL);

40 DWORD dwRet = WaitForSingleObject(hThread, nTimeOut);

41 CloseHandle(hThread);

42

43 if(0 != dwRet)

44 {

45 // 处理超时逻辑;

46 }

47

48 if(0 != pConnectOptions->nErrNum)

49 {

50 // 处理错误连接逻辑

51 }

52

53 // 处理 pConnectOptions 指针;

View Code

标签:pConnectOptions,IP,pConnOpts,ret,MySqlConnOpts,strUserName,MySQL,NULL,连接

来源: https://www.cnblogs.com/dishengAndziyu/p/12172795.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值