Прежде всего, мой пример кода:Как справиться с ошибкой inet_ntop()?
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 blÀ3
Код выше в раздвоенной ребенка, чтобы он не остановить весь сценарий, он просто возвращается к родительскому процессу, но ошибки нет (я тестирую возвращаемое значение, в этом случае оно должно быть ERROR_PAR = 1, поэтому должно появиться сообщение об ошибке).
Есть ли что-то не так в том, как я использую эти функции или проблема должна быть где-то еще?
EDIT: Важно проверить возвращаемое значение getaddrinfo перед любыми другими функциями. Поэтому проблема решена.
Вы проверили 'errno', когда функция не удастся? Он должен дать вам код ошибки, который говорит вам, почему он терпит неудачу. –
Кроме того, вы уверены, что первый адрес, возвращенный 'getaddrinfo', является адресом IPv4? –
Ой, как я мог забыть проверить возвращаемое значение getaddrinfo? Я пытаюсь решить это неправильно здесь. Спасибо, проблема «решена»! – milano