0

まず第一に、私のコード例:

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の戻り値を確認することが重要です。したがって、問題は解決されます。

4

1 に答える 1