IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

getaddrinfo et la resolution sur ubuntu.


Sujet :

Réseau C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 35
    Points
    35
    Par défaut 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 : 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);

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 35
    Points
    35
    Par défaut
    Bon, j'ai réussi a faire marcher la résolution:

    Il ne fallait pas compiler en static.

    Cependant quelqu'un pourrais m'expliquer ce que ça change?

  3. #3
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Intéressant. Que vaut errno ? que retourne getaddringo() ?
    -- Yankel Scialom

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par dodo285 Voir le message
    Il ne fallait pas compiler en static.
    Cependant quelqu'un pourrais m'expliquer ce que ça change?
    l'explication ici http://stackoverflow.com/questions/1...-gethostbyname

    en gros la résolution de noms est étroitement liée à la libc et l'aspect modulaire de la résolution qui permet de check dans /etc/hosts, les yellow pages etc.

    il semblerait que le switch --enable-static-nss permette néanmoins de faire le job ou pas, si on est dans l'optique de recompiler la libc en fait, my bad

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 35
    Points
    35
    Par défaut
    Ok merci tout est clair maintenant, sauf le fait que la compil en static marche sur debian et pas sur ubuntu.

Discussions similaires

  1. resolution ecran Ubuntu sur Virtual box
    Par ikuzar dans le forum VirtualBox
    Réponses: 2
    Dernier message: 15/12/2011, 09h47
  2. Installation de lex et yacc sur ubuntu
    Par maggie78 dans le forum Applications et environnements graphiques
    Réponses: 8
    Dernier message: 06/10/2011, 10h30
  3. Carte Wifi sur Compaq Presario sur Ubuntu
    Par Jack_serious dans le forum Matériel
    Réponses: 6
    Dernier message: 02/12/2005, 18h04
  4. Réponses: 3
    Dernier message: 10/10/2005, 18h30
  5. Probléme de son sur UBUNTU
    Par BRAUKRIS dans le forum Ordinateurs
    Réponses: 3
    Dernier message: 13/09/2005, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo