0

サンプル プログラムで getaddrinfo を使用してホスト名をアドレスに変換していますが、「要求された名前は有効ですが、要求されたタイプのデータが見つかりませんでした」というエラーで失敗しています。

サンプルコード:

struct addrinfo hints, *save_res= 0, *res= 0;
int gai_rc;
char host[] = "localhost";
char port[] = "3333";

/* set hints for getaddrinfo */
ZeroMemory( &hints, sizeof(hints) );
hints.ai_protocol= IPPROTO_TCP; /* TCP connections only */
hints.ai_family= AF_UNSPEC;     /* includes: IPv4, IPv6 or hostname */
hints.ai_socktype= SOCK_STREAM;
/* Get the address information for the server using getaddrinfo() */
gai_rc= getaddrinfo(host, port, &hints, &res);
if (gai_rc != 0)
{
    printf("getaddrinfo failed with error: %d - %s\n", gai_rc, gai_strerrorA(gai_rc));
    return false;
}
printf("success");

MSDN ドキュメントから: WSANO_DATA 11004 有効な名前、要求されたタイプのデータ レコードがありません。要求された名前は有効であり、データベースで見つかりましたが、解決されている正しい関連データがありません。これの通常の例は、DNS (ドメイン ネーム サーバー) を使用するホスト名からアドレスへの変換の試行 (gethostbyname または WSAAsyncGetHostByName を使用) です。MX レコードが返されますが、A レコードは返されません。これは、ホスト自体は存在するが、直接到達できないことを示しています。

locahost でこのエラーが発生する理由を教えてください。ここで何が問題なのかわかりません..

4

1 に答える 1

0

私は同じ問題を抱えていました。

hints.ai_protocol= IPPROTO_TCP; 

次の理由から、目的の結果には影響しません。

hints.ai_socktype= SOCK_STREAM;

TCP接続のみを選択するように指示しています。たぶん、最初だけを使用することもできますが、私はそれをチェックしませんでした.

于 2013-10-09T11:11:49.067 に答える