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
J'ai mis à jour les questions. Juste que sa structure addrinfo.
Est-ce le code ? Vous êtes censé pour initialiser
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.
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
Vous devez vous connecter pour publier un commentaire.
Cela peut paraître absolue stupide, mais c'est la façon dont je l'ai corrigé.
EDIT: Le problème réel est que j'ai été lire les informations de port à partir d'un fichier. lorsque j'utilise le getline (), il n'a pas de supprimer le saut de ligne char à la fin de ce que jamais la raison. Le correctif ci-dessus (si vous appelez d'un fixe) n'est plus nécessaire.
getaddrinfo
avecport.c_str()
directement? Peut-être vous devriez comparer les différentes chaînes de caractères pour voir si elles diffèrent, il pourrait être un signe d'un bug dans le compilateur (bien que peu probable, il a été connu pour se produire).Oui je suis d'accord. J'ai essayé 3 fois, en changeant d'avant en arrière. Il ne fonctionne pas avec le port.c_str().
Le problème réel est que j'ai été lire les informations de port à partir d'un fichier. Lorsque j'utilise le getline (), il n'a pas de supprimer le saut de ligne char à la fin de ce que jamais la raison. Quand je l'ai corrigé, il fonctionne très bien quand je l'appelle getaddrinfo avec le port.c_str() directement. Merci.
OriginalL'auteur FourOfAKind