首先,我的代码示例:
cout << "bla1" << endl;
struct addrinfo hints, *info;
int status;
memset(&hints, 0, sizeof hints);
char ip4[INET_ADDRSTRLEN];
char ip6[INET6_ADDRSTRLEN];
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
cout << "bla2" << endl;
status = getaddrinfo(url.c_str(), NULL, &hints, &info);
cout << "bla3" << endl;
if(!inet_ntop(AF_INET, &((const sockaddr_in *)info->ai_addr)->sin_addr , ip4, INET_ADDRSTRLEN)) {
return ERROR_PAR;
}
cout << "bla4" << endl;
url 变量包含要解析的地址(我正在研究简单的客户端/服务器 DNS 解析器)。如果可以解决,一切正常,但是当 url 无法解析时,我的输出只有
bla1 bla2 bla3
上面的代码在 fork child 所以它不会停止整个脚本,它只是返回到父进程,虽然没有错误(我正在测试返回值,在这种情况下它应该是 ERROR_PAR = 1 所以错误消息应该出现)。
我使用这些功能的方式有问题还是问题一定出在其他地方?
编辑:在任何其他函数之前检查 getaddrinfo 返回值很重要。所以问题就解决了。