首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

nodejs的dns解析源码分析

设置了一些参数后,调用cares模块(cares_wrap.cc)的getaddrinfo方法,在care_wrap.cc的初始化函数中我们看到, getaddrinfo函数对应的函数是GetAddrInfo...// dns解析的工作函数 static void uv__getaddrinfo_work(struct uv__work* w) { uv_getaddrinfo_t* req; int err...; // 根据结构体的字段获取结构体首地址 req = container_of(w, uv_getaddrinfo_t, work_req); // 阻塞在这 err = getaddrinfo...(err); } 从上面代码我们可以知道,libuv是调用了操作系统的getaddrinfo函数,然后会阻塞在这,所以线程会被挂起,等待查询返回时,libuv会执行uv__getaddrinfo_done...// dns解析完执行的函数 static void uv__getaddrinfo_done(struct uv__work* w, int status) { uv_getaddrinfo_t*

4.5K30

InetAddress.getLocalHost() 执行很慢?

#getaddrinfo内部的具体实现基本都是和操作系统交互,我们简单瞄几眼就行。...另外,在 getaddrinfo 源码中没有找到火焰图给出的调用链,我们暂时不再深入。...Wireshark 抓包时提到,mdns 查询时存在重试机制,但标准 Linux 的 getaddrinfo 方法中没有看到对应的代码; 前面提到的5秒返回结果,其实不是返回结果,而是超时了。...但标准 Linux 的 getaddrinfo 方法中没有看到对应的超时控制代码; 因此,我们可以大胆猜测 MaxOS 系统对标准 Linux 代码进行了修改,加了本地缓存、重试、超时等机制。...参考文章 如何查找 jdk 中的 native 实现 从Chrome源码看DNS解析过程 getaddrinfo工作原理分析 浅谈getaddrinfo函数的超时处理机制

4.3K40
领券