- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在编写一个作为 systemd service 运行的 C 应用程序在启动时(发行版:Arch Linux)并且应该连接到服务器。因为应用程序是在启动时运行的,所以最终会发生网络连接尚未建立的情况。这自然会导致需要一个的第一个函数失败,在我的例子中是 getaddrinfo
。
所以我想我会写一个循环,重复调用 getaddrinfo
直到它在网络准备就绪后成功。不幸的是,我发现即使在建立连接后,getaddrinfo
仍会失败并显示 name or service not known
。
我可以通过主机名 ping 服务器,但 getaddrinfo
仍然无法执行此操作。如果我停止应用程序并再次运行它,一切正常。如果网络连接在第一次调用之前已经建立,getaddrinfo
也可以正常工作。
显然,如果 getaddrinfo
因网络未就绪而失败一次,它将永远失败。它似乎没有意识到现在存在的连接。使用已弃用的 gethostbyname
时,行为是相同的。
这种行为的原因是什么?有没有办法强制 getaddrinfo
刷新内部变量(如果存在)或类似的东西,这可以解释为什么函数仍然认为没有连接?为了检查网络是否准备就绪,我应该提前调用另一个函数吗?
我想避免等待一段时间的延迟,期待网络在之后连接。我也更愿意从我的应用程序中检查连接,而不是让 bash 脚本先检查它然后启动应用程序。
最佳答案
您可以通过编译以下测试程序并按照以下说明理解答案:
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
while (1)
{
struct addrinfo *res;
int rc=getaddrinfo(argv[1], "http", NULL, &res);
printf("getaddrinfo returned %d\n", rc);
if (rc == 0)
freeaddrinfo(res);
sleep(1);
}
}
在运行这个测试程序之前:
/etc/resolv.conf
暂时重命名为/etc/resolv.conf.save
。/etc/resolv.conf.save
重命名为 /etc/resolv.conf
。当您断开并重新连接网络时,您的网络堆栈会相应地重写和更新 /etc/resolv.conf
。 C 库中的 DNS 解析器需要此配置文件。 C库第一次从/etc/resolv.conf
中读取DNS配置,并缓存起来。它不会在每次查找时检查 /etc/resolv.conf
的内容是否已更改。
最后:
resolv.h
中定义的 res_init()
的调用到这个测试程序,阅读相应的手册页,看看会发生什么发生。这就是你的答案。关于c - 如果 getaddrinfo 失败一次,它将永远失败(即使在网络准备就绪之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30360029/
在我的Kubernetes设置上,我有2个服务-A和B. 服务B取决于完全启动服务A。 我现在想在服务B的Pod中设置一个TCP就绪探针,以便他们测试服务A的Pod是否已完全运行。 Service B
我有一个类(LoadClass),它在页面加载时初始化,并在我的例子中打开一个 SQLite 数据库并执行几个查询。现在我希望其他组件仅在 LoadClass 先前完成加载数据库时执行代码,但这必须随
我有两个应用程序 - app1 和 app2 ,其中 app1 是 config server保存 的配置app2 .我已经定义了 /readiness端点在 app1 并且需要等到它返回 OK启动
我的页面中有一个 iframe,我正在向该 iframe 提交我的表单,因此在 iframe 完成加载后,我需要在每次 iframe 完成加载内容时触发一个函数。 我试过使用 ready 和 load
我正在尝试制作一款游戏。玩家单击“就绪”后,我希望“就绪”框消失(现在,如果您单击就绪框内部,则不会发生任何事情,我不确定为什么)并生成一个随机矩形(随机 x 和 y 坐标)。玩家在第一个矩形的墙壁内
我有另一个 JW Player 问题...我已经实现了 JW Player 以在单击按钮时替换页面顶部的图像。该代码如下所示: Watch now $( ".button-watch1" ).cli
有谁知道我可以在不加载整个框架的情况下使用的优秀 javascript DOM 就绪库?我在 google code 上找到了一个这似乎可行,但该库是在 2008 年发布的,我找不到关于最新跨浏览器支
我在 docker-library/healthcheck 看到了 RabbitMQ 的 docker healthcheck 示例. 我想对我的 Kubernetes 部署应用类似的机制,以等待 R
有人可以解释一下为什么警报语句在这种情况下使用时不会返回任何内容: $(document).ready(function(){ $.get("/getsomedata.php", functi
我已经在一个项目上独立工作了一段时间,现在,由于各种原因,新的开发人员可能会加入该项目。 当然,我使用版本控制软件,但我担心将我的项目导入 Eclipse 并使其运行对新手来说可能有点困难,我希望它尽
我只是想知道是否有人对使用 Promise 时 Node JS 中的“确保就绪”模式有什么好的想法。我有类似的东西,但我认为它的主要问题是我认为 promise 的 .then(cb) 实际上覆盖了前
我知道这是这里的一个常见问题,但我已经对之前回答的问题进行了研究,但似乎找不到我的错误。 作为我正在制作的应用程序的一部分,当页面加载时, document.ready 函数应该查看无序列表中的每个列
谷歌 Ajax 爬虫说明说 !# 实际上被谷歌爬虫转化为 ?_escaped_fragment_。 我想准备我的 Vaadin 7 应用程序以便为 Google 搜索引擎做好 SEO 准备,所以您能否
问题是关于 http://labjs.com – 一个很棒的非阻塞 JavaScript 加载和依赖管理库。 我已经阅读了文档,但我一定是太累了或者什么的——我找不到任何关于 DOM 就绪事件的信息。
我通过 TCP/IP - SOCKET 发送数据 (ZPL) 代码。如果 zebra 打印机在线并准备就绪,我想检查 zebra 打印机的状态。 我谷歌了,但没有找到解决方案。 我知道斑马打印机的静态
我正在尝试连接 JFUSE 项目中的数据库。我在 pom 文件中包含了 com.mysql.jdbc 依赖项,项目构建运行良好。但是后来我遇到了这个烦人的问题。当我尝试将 bundle 安装到 OSG
我有一个条目列表。当我点击这样一个条目时,一个 HTTP 请求就完成了,数据将被加载并显示在一个表格中。到目前为止一切顺利。 现在我尝试创建一个导出函数来一次输出所有表。抽象代码如下所示: this.
我正在创建 CI/CD 管道。 我跑 helm install --wait --timeout 300 ... .但这并没有真正等待,只是在“发布”状态为 DEPLOYED 时返回。 . 那么我在
现在 Storm Spouts 有一个 open 方法来配置它们,而 Bolts 有一个 prepare 方法。有没有办法让所有 Spout 实例等待 Bolt 上的所有 prepare 方法完成监听
要等待某个 pod 完成,命令是 kubectl wait --for=condition=Ready pod/pod-name 同样,我想等待 statefulset 中的任何一个 pod 准备就绪
我是一名优秀的程序员,十分优秀!