2
struct addrinfo *myAddrinfo, *curMyAddrinfo, hint;
memset(&hint, 0, sizeof(struct addrinfo));
hint.ai_family = AF_INET;
hint.ai_protocol = AI_PASSIVE;
hint.ai_socktype = SOCK_STREAM;

const int code = getaddrinfo(NULL, SERVER_PORT, &hint, &myAddrinfo);
if ((code) != 0) {
    printf("getaddrinfo error occours: %s ",
            gai_strerror(code));
    return 1;
}

これにより、「ai_socktypeがサポートされていません」というエラーが表示されますが、コメントアウトするとうまくいきますhint.ai_protocol = AI_PASSIVE;が、なぜそれが起こるのでしょうか?

御時間ありがとうございます

4

2 に答える 2

8

これは「ai_socktype not supported」を検索したときの上位の結果であるため、ここに追加するだけの価値があります。別の理由として、ヒントがスタックでゼロに設定されていない可能性があります。そのために必要な

memset(&hints, 0, sizeof hints);

もちろん、日産のコードにはすでにそれがありました

于 2015-02-04T13:44:33.507 に答える
2

これは、AI_PASSIVEが(ai_protocolではなく)ai_flagsフィールドを参照しているためです。試す :

hint.ai_flags = AI_PASSIVE;

そして、addrinfo構造を見てください。

于 2011-05-11T03:18:46.577 に答える