getaddrinfo et la resolution sur ubuntu.
Bonjour,
Je développe actuellement un programme de load balancing pour le calcul.
Il est basé sur un modèle maitre/travailleur.
En gros le maitre vas servir les travailleurs en calcul..
Le travailleaur doit donc résoudre l'adresse du maitre pour pouvoir s'y connecter.
J'utilise getaddrinfo pour faire la résolution, et tout marche bien.... sur une debian, si je passe sur ubuntu, j'obtiens le message suivant:
Code:
error in getaddrinfo: Name or service not known
D'ou cela peut il venir? (cela se produit sur ubuntu mais pas sur debian).
Comment régler ce problème, qui peut sans doute être réglé puisque nslookup fait son travail.
CI dessous le code concerné:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
int tcp_delay = 1;//disable nagle algorithm
int rt;
struct addrinfo * addrinfos;
struct addrinfo * addrinfo;
struct addrinfo hints;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET;//IP V4
hints.ai_socktype = SOCK_STREAM;//TCP Connection
hints.ai_flags = 0;
hints.ai_protocol = 0;
rt = getaddrinfo(host, port, &hints, &addrinfos);//DNS resolution
if (rt != 0)
{
if (rt == EAI_SYSTEM)
{
perror("getaddrinfo");
}
else
{
fprintf(stderr, "error in getaddrinfo: %s\n", gai_strerror(rt));
}
return(PLD_NOK);
}
if ((*sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("socket in request_connexion");
return(PLD_NOK);
}
if (setsockopt(*sock, IPPROTO_TCP, TCP_NODELAY, (void *)&tcp_delay, sizeof(int)))
{
perror("setsockopt in request_connexion");
close(*sock);
return(PLD_NOK);
}
for(addrinfo = addrinfos; addrinfo != NULL; addrinfo = addrinfo->ai_next)
{
rt = connect(*sock, addrinfo->ai_addr, sizeof (struct sockaddr_in));
if (rt == -1) perror("connect");
else break;
}
freeaddrinfo(addrinfos);
if (addrinfo == NULL)
{
fprintf(stderr, "Unable to connect to %s:%s\n",host,port);
return(PLD_NOK);
}
return(PLD_OK); |