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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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);