getaddrinfo échoué avec l'erreur : Nomserveur pas pris en charge pour ai_socktype en C++

Cela, j'ai observé, en raison de la port. le port est le C++ string. Quand j'ai coder en dur le numéro de port de dire "4091" je ne vois pas ce problème. Des suggestions?

int sockfd;
struct addrinfo hints, *servinfo, *p;
int rv;

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; 
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE; 

cout << "port: " << port << endl;

const char * por = port.c_str();

if ((rv = getaddrinfo(NULL, por, &hints, &servinfo)) != 0) {
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
}
Ce qui est dans hints?
J'ai mis à jour les questions. Juste que sa structure addrinfo.
Est-ce le code ? Vous êtes censé pour initialiser hints
désolé j'aurais du posté code complet. J'ai mis à jour. Depuis j'ai pensé que ce port est le problème, je n'ai pas de montrer que le code avant.
Oui, les sockets UDP sont utilisés en tant que passif sockets. AI_PASSIVE veut juste dire "donnez-moi une adresse que je peux lier", par opposition à "donnez-moi une adresse je peux me connecter". Donc, UDP utilisent des serveurs AI_PASSIVE et UDP clients ne le font pas.

OriginalL'auteur FourOfAKind | 2012-04-24