ai_canonname



  • hi, hilfe,
    warum kann "cout<<res->ai_canonname" nichts ausgeben?

    struct addrinfo* res = NULL;
          if (getaddrinfo(host_info->h_name,NULL,NULL,&res))
           { cerr<<"\ngetaddrinfo() error!\n"; return 1; }
          res->ai_flags = AI_CANONNAME;
          cout<<"canonname: "<<res->ai_canonname<<endl;
    

    vielen Dank!



  • man: getaddrinfo:
    Erstens solltest du die Flags setzen, bevor du die Adressinfo abfragst und zweitens solltest du diese Flags auch (als vorletzten Parameter) übergeben:



  • Es funktioniert!!! 😃 😃 😃

    vielen Dank, aber warum? vielleicht kannst du mir genau erklären?

    struct addrinfo hints;
          struct addrinfo* res = NULL;
               memset(&hints, 0, sizeof(hints));
               hints.ai_flags = AI_CANONNAME;
               hints.ai_family = PF_INET;
               hints.ai_socktype = SOCK_STREAM;
          if (getaddrinfo(host_info->h_name,NULL,&hints,&res))
           { cerr<<"\ngetaddrinfo() error!\n"; return 1; }
          cout<<"canonname: "<<res->ai_canonname<<endl;
    


  • Wenn du jetzt noch etwas Speicher anlegst, auf den hints verweisen kann, sollte es funktionieren. (aktuell ist der Pointer nicht initialisiert, zeigt also irgendwo in den RAM).



  • memset(&hints, 0, sizeof(hints));
    meine Meinung nach ist copy '\0' zu hints, aber hint ist ein struct, so finde ich solche schreibeweise nicht schön. gibt es andere Möglichkeit?

    2, wenn ich 'hints' pointer deklariere : struct addrinfo* hints; wie geht's weiter? (wie kann ich dem zuweisen?)

    3, wenn ich nicht AI_CANONNAME ansetze, wie ist die Returnwert von getaddrinfo?

    dank sehr



  • Leg mal lieber hints als Objekt an statt als Pointer an:

    struct adrinfo hints={0}/*initialisiert mit 0-Werten*/,*res=NULL;
    hints.flags=AI_CANONNAME;
    getaddrinfo(host,server,&hint,&res);
    
    cout<<res->ai_canonname<<endl;
    

    PS: Und schau dir mal die oben verlinkte Manual-Page zu getaddrinfo an 😉



  • "Erstens solltest du die Flags setzen, bevor du die Adressinfo abfragst und zweitens solltest du diese Flags auch (als vorletzten Parameter) übergeben:"

    so schöne Erklärung habe ich nie erlebt !!! 😋

    vielen Dank CStoll


Anmelden zum Antworten