Прежде всего, мой пример кода:
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
Код выше находится в разветвленном потомке, поэтому он неЧтобы остановить весь сценарий, он просто возвращается к родительскому процессу, но без ошибок (я проверяю возвращаемое значение, в данном случае это должно быть ERROR_PAR = 1, поэтому должно появиться сообщение об ошибке).
Что-то не так в том, как я использую эти функции, или проблема должна быть где-то еще?
РЕДАКТИРОВАТЬ: Важно проверить возвращаемое значение getaddrinfo перед любыми другими функциями.Так что проблема решена.