Linux c++:getaddrinfo 因 EAI_AGAIN 而失败,curl 无法解析主机
Linux c++: getaddrinfo failed with EAI_AGAIN, curl could not resolve host
我通过ppp打开GSM连接,并尝试使用curl从URL下载文件。
使用很少的设备,我从curl
中得到CURLE_COULDNT_RESOLVE_HOST错误,getaddrinfo
导致EAI_AGAIN。
route
我的 ppp0 接口注册正确。resolv.conf包含谷歌DNS,在终端中手动执行nslookup
正在工作。
我不知道为什么它不起作用。我唯一知道的是:IPv6是不可能的。
这是我的getaddrinfo
代码
int checkINet(std::string address)
{
struct addrinfo hints, *servinfo, *p;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
char ip_addr[INET6_ADDRSTRLEN];
int s = getaddrinfo(address.c_str(), NULL, &hints, &servinfo);
if (s != 0)
{
std::cout << "No connection possible: " << address << "n";
std::cout << "getaddrinfo: " << s << " " << gai_strerror(s) << "n";
return -1;
}
else
{
std::cout << "Conection successful: " << address << "n";
for (p = servinfo; p != NULL; p = p->ai_next)
{
void *addr;
if (p->ai_family == AF_INET)
{
struct sockaddr_in *ipv4 =(struct sockaddr_in *)p->ai_addr;
addr = &(ipv4->sin_addr);
}
else
{
struct sockaddr_in6 *ipv6 =(struct sockaddr_in6 *)p->ai_addr;
addr = &(ipv6->sin6_addr);
}
inet_ntop(p->ai_family, addr, ip_addr, sizeof ip_addr);
std::cout << addr << "n";
}
}
freeaddrinfo(servinfo);
return 0;
}
对于卷曲:
CURL *curl;
FILE *fp;
CURLcode res;
// initialise a connection to the server
curl = curl_easy_init();
if (curl)
{
fp = fopen(UPDATE_ZIP, "wb");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
if (CURLE_OK != res)
{
std::out << "curl failed with: " << res << "n";
return res;
}
return 0;
}
return -1;
短暂的
tipp是对的。更改了/etc/nsswitch.con
内的顺序主机:文件 DNS自主机:DNS 文件
相关文章:
- 在C++中使用cURL和多线程
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 如何检查cURL是否成功登录?c ++
- 如何停止 CLR 主机?
- 如何强制 Thrift 仅接受来自本地主机的连接
- 带有进度表的 curl 多接口程序
- 库达如何将字符**从内核复制到主机
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- 使用 CURL 上传构建
- 如何在 2 台主机之间保持 UDP 套接字连接打开
- 如何在 cuda 中将 kd 树从主机复制到驱动程序
- 使用 curl_easy_cleanup(curl) 时收到未经处理的 NULL 异常
- Curl with vcpkg
- curl 请求的用户输入
- 如何使用 curl 将 POST 请求从 python 重写为 C++
- Poco 库 PUT 方法未按预期工作,尽管主机、方法、内容类型设置正确
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- OpenCL 错误类在主机C++给出错误
- Linux c++:getaddrinfo 因 EAI_AGAIN 而失败,curl 无法解析主机