gpt4 book ai didi

c++ - 如何处理 inet_ntop() 失败?

转载 作者:行者123 更新时间:2023-12-03 12:51:48 28 4
gpt4 key购买 nike

首先,我的代码示例:

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 解析器)。如果可以解决,一切正常,但是当网址无法解析时,我的输出只是

bla1布拉2bla3

上面的代码位于 fork 子进程中,因此它不会停止整个脚本,它只是返回到父进程,但没有错误(我正在测试返回值,在本例中它应该是 ERROR_PAR = 1因此应该出现错误消息)。

我使用这些函数的方式是否有问题,或者问题一定出在其他地方?

编辑:在任何其他函数之前检查 getaddrinfo 返回值非常重要。这样问题就解决了。

最佳答案

要正式回答这个问题,请查看手册:

On success, inet_ntop() returns a non-null pointer to dst. NULL is returned if there was an error, with errno set to indicate the error.

所以你会做这样的事情:

#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(void) {
char *ip = "127.0.0.1";
uint32_t src;
inet_pton(AF_INET, ip, &src);

char dst[INET_ADDRSTRLEN];
if (inet_ntop(AF_INET, &src, dst, INET_ADDRSTRLEN)) {
printf("converted value = %s \n", dst);
return 0;
} else {
printf("inet_ntop conversion error: %s\n", strerror(errno));
return 1;
}
}

关于c++ - 如何处理 inet_ntop() 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9603273/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com