まず第一に、私のコード例: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 BLA3
上記のコードは、フォークした子になっていますスクリプト全体、それはちょうど親プロセスに戻りますが、エラーは発生しません(戻り値をテストしています。この場合、ERROR_PAR = 1でエラーメッセージが表示されるはずです)。
これらの機能を使用する方法に問題がありますか、または問題が別の場所にある必要がありますか?
EDIT:他の関数の前にgetaddrinfoの戻り値をチェックすることは重要です。だから問題は解決される。正式には、これを答えるマニュアルを確認するには
を、あなたは '関数が失敗したerrno'を確認しましたか?なぜ失敗するのかを示すエラーコードが表示されます。 –
また、 'getaddrinfo'によって返される最初のアドレスがIPv4アドレスであることを確かめますか? –
ああ、どうすればgetaddrinfoの戻り値をチェックするのを忘れることができますか?私はここでそれを間違って解決しようとしています。ありがとう、問題は "解決"です! – milano