最近在使用libcurl作为httpclient来获取一些服务时遇到了一个问题,就是在网络切换的时候,执行 curl_easy_perform的时候会报 can’t resolve host 的错误。而且是持续很长时间。但是此时网络环境其实是正常的,使用ping,能够正常地ping通www.baidu.com。应用场景是在一个嵌入式设备上,同时包含有网口和无线,两者接入在不同的网络中。默认以有线优先。但是如果将有线拔掉,切换到无线。调用libcurl服务的进程就会报上述错误。因为设备相当于在家用路由器下面,DNS服务器也就是根路由器,类似于192.168.0.1或者192.168.31.1。考虑从DNS缓存的角度解决问题,查询到curl有CURLOPT_DNS_CACHE_TIMEOUT这个选项,发现了如下一段话,盲猜能解决我的问题。

The name resolve functions of various libc implementations don't re-read name server information unless explicitly told so (for example, by calling res_init(3)). This may cause libcurl to keep using the older server even if DHCP has updated the server info, and this may look like a DNS cache issue to the casual libcurl-app user.https://curl.haxx.se/libcurl/c/CURLOPT_DNS_CACHE_TIMEOUT.html

个人翻译如下:很多域名解析函数的C库函数是不会重新读取域名服务器的信息的,除非被显式地告知需要如此(像调用res_init)。这会造成libcurl持续使用旧的dns服务器,虽然DHCP已经更新了域名服务器的信息。这对于一个随意的libcurl使用者来说,看起来像是一个DNS缓存问题(orz,说的不就是我嘛)man了一下res_init的定义。

       The  res_init()  function  reads the configuration files (see resolv.conf(5)) toget the default domain name, search order and name server  address(es).   If  noserver  is  given, the local host is tried.  If no domain is given, that associ‐ated with the local host is used.  It can be  overridden  with  the  environmentvariable  LOCALDOMAIN.  res_init() is normally executed by the first call to oneof the other functions.

确实是会读取并刷新存储了DNS服务器和地址的resolv.conf文件来使用。而我这里的场景确实是涉及到网络的切换,导致重新DHCP,此时DNS服务器也发生了变化,原先的DNS服务器也不可访问了。就会导致出现该错误。我采用了如下的比较粗暴的解决方式,测试确认可以解决问题。网络切换后,不会在返回无法解析域名的异常。

    int res =-1 ;CURL* curl;    curl = curl_easy_init();...res = curl_easy_perform(curl);if (res == CURLE_COULDNT_RESOLVE_HOST){res_init();}

另一种可能也可以解决的办法是为curl句柄设置DNS服务器,使用CURLOPT_DNS_SERVERS,选项,应该也可以解决。不过本人没有尝试。
以上。

libcurl返回DNS无法解析的问题相关推荐

  1. k8s集群DNS无法解析问题的处理过程

    搭建k8s集群时DNS无法解析问题的处理过程 问题描述 在搭建Kubernetes集群过程中,安装了kube-dns插件后,运行一个ubuntu容器,发现容器内无法解析集群外域名,一开始可以解析集群内 ...

  2. 详解DNS正向解析实验(有图有实验)

    详解DNS正向解析实验(有图有实验) 一.DNS简介 1.DNS的定义 2.域名结构及解析方式 3.DNS服务器类型 二.构建DNS域名解析服务器步骤 1.安装bind软件包 2.配置正向解析 ①.先 ...

  3. Mysql异常问题排查与处理——mysql的DNS反向解析和客户端网卡重启

    中午刚想趴一会,不料锅从天降!!!Mysql连不上了....... 现象如下: 现象1:登录mysql所在服务器,连接MySQL 成功: 现象2:通过客户端远程连接MySQL,返回失败,如下: Ent ...

  4. 域控dns无法解析域控_域注册商,DNS和托管

    域控dns无法解析域控 by ᴋɪʀʙʏ ᴋᴏʜʟᴍᴏʀɢᴇɴ 由ᴋɪʀʙʏᴋᴏʜʟᴍᴏʀɢᴇɴ 域名注册商,DNS和托管 (Domain registrars, DNS, and hosting) ...

  5. mysql dns反向解析_Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve)

    Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve) 时间:2019-01-19 11:28作者:网友投稿 MySQL数据库收到一个网络连接后,首先拿到对方的IP地址, ...

  6. DNS无法解析IP_通过YouTube的封杀窥视DNS原理

    YouTube是世界上最流行的视频网站,但由于任何人都可以在YouTube上发布视频,使视频的真实性无法得到保障,甚至一些侮辱民族感情.亵渎宗教的视频也频频出现,引发争议.从2010年3月23日晚上起 ...

  7. DNS 系统解析过程概述

    DNS(Domain Name Servive,域名服务)是Internet/Intranet中最基础也是非常重要的一项服务,提供了网络访问中域名到IP地址的自动转换.我们知道,Internet上的主 ...

  8. DNS智能解析的搭建与配置

    分类: LINUX 原文地址:DNS智能解析的搭建与配置 作者:十年梦生 9月份整整忙了一个月,都抽不出时间来写篇文章,这几天趁着10.1终于有时间来写些东西了,将9月份所做的一些东西来做下总结. 今 ...

  9. ecs 对比 本地服务器_2019年度教育信息化优秀案例丨上海交通大学:高校基于ECS优化DNS权威解析...

    大型互联网网站和服务采用CDN使用户就近访问资源以提高访问速度.CDN在各地区.各运营商部署的节点,大多通过DNS进行流量调度. 权威DNS服务器的分离解析(Split DNS)技术根据不同来源IP地 ...

  10. 中科三方:DNS云解析技术浅析

    智能DNS云解析通过其智能解析,健康监测,负载均衡,宕机切换等高可用性的功能特性,给客户带来快捷,安全,流畅的上网体验.传统的DNS因为其解析时间冗长,易被劫持,无法精准调配用户的流量使用等问题,无法 ...

最新文章

  1. Linux/windows下nginx的安装及使用
  2. mysql缓存hibernate_关于Hibernate缓存机制
  3. placement new(转)
  4. LintCode Python 简单级题目 96.链表划分
  5. mysql 汉编码 的选_peewee连接mysql汉语言数据编码_mysql
  6. Android学习笔记——Handler(二)
  7. sql查询中使用in和exits比较和区别
  8. 【数字全排列】LeetCode 46. Permutations
  9. Android 高级面试-2:IPC 相关
  10. vmware esxi 4.0 上安装postfix,mailx发送邮件
  11. 直播网站源码,简洁的登录页面
  12. 144个城市坐标Python程序
  13. 博途v14电脑要求_博途V14或者V15,大家现在用的电脑-工业支持中心-西门子中国...
  14. 为什么学习嵌入式会搞单片机以及如何学习C51单片机
  15. 北斗对时服务器(GPS卫星同步时钟)分析北斗与GPS区别
  16. python爬取喜马拉雅FM音频
  17. google 游戏下载
  18. 10张剪纸风格2021牛年祝福海报
  19. 【Web技术】1002- 应式布局,你需要知道的一切
  20. 【阅读】Leaf——美团点评分布式ID生成系统

热门文章

  1. 单车---------Eason
  2. 微带贴片天线的分析方法-传输线模型法
  3. Introduction to Modern cryptograhy阅读笔记(二)
  4. icem密度盒怎么设置_ICEM学习笔记
  5. 一个“小把戏”“哄得”小朋友挺满意
  6. PC_溢出概念+判断方法+示例
  7. 如何越狱苹果TV2在iOS 4.2使用PwnageTool
  8. Ugly Windows UVA - 1419
  9. 在Visual Studio 2019 搭建 QGIS3.22 二次开发环境
  10. Sequence Model-week1编程题2-Character level language model【RNN生成恐龙名 LSTM生成莎士比亚风格文字】...