Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Etrange segfault avec gethostbyname
Envoyé par: ofkain

Salut a tous,

Voila, j'ai un bout de code tout simple qui fait une simple résolution d'adresse:

#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <errno.h>
#include <sys/types.h>
#include <netinet/in.h>

int main (int argc, char *argv[]) {
  struct hostent *host1;
  struct in_addr *addr1;

  if (argc != 2) {
  fprintf (stderr, "usage: get_ip adresse\n");
  exit (1); }

  if ((host1=gethostbyname(argv[1])) == NULL) {
  herror ("gethostbyname");
  exit (1); }

  addr1=(struct in_addr *)host1->h_addr;

  printf ("Hostname : %s\n",host1->h_name);
  printf ("IP: %s\n", inet_ntoa(addr1->s_addr));
  
  return 0;
}

Le problème assez etrange est que, lorsque je le compile et l'excute sous gentoo, ce code segfault :
$ gcc get_ip.c -o get_ip -lnsl
$ ./get_ip www.google.fr
Hostname : www.l.google.com
Erreur de segmentation

_Mais_ le meme code sous solaris compilé exactement de la meme facon fonctionne tres bien :
psun1 ~ $ gcc get_ip.c -o get_ip -lnsl
psun1 ~ $ ./get_ip www.google.Fr
Hostname : www.l.google.com
IP: 209.85.129.104

si quelqu'un a une explication a ce phénomene... je suis preneur ?-(

Poste le Friday 7 September 2007 23:02:30
Répondre     Citer    
Re: Etrange segfault avec gethostbyname
Envoyé par: nicola

Essaie de le lancer avec strace devant ?

--
On ne prête qu’aux riches, et on a bien raison, parce que les autres remboursent difficilement.
-+- Tristan Bernard (1866-1947) -+-

Poste le Saturday 8 September 2007 06:55:29
Répondre     Citer    
Re: Etrange segfault avec gethostbyname

gcc -Wall -O -g getip.c -o getip
trouve une erreur:
getip.c: In function 'main':
getip.c:25: warning: implicit declaration of function 'inet_ntoa'
getip.c:25: warning: format '%s' expects type 'char *', but argument 2 has type 'int'

Si on corrige en rajoutant les bons #include (documentés dans man inet_netoa)
on obtient
 
getip.c:28: error: incompatible type for argument 1 of 'inet_ntoa'

Moralité: RTFM et toujours compiler avec gcc -Wall

Je te laisse corriger ton erreur.


----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Saturday 8 September 2007 23:19:21
Répondre     Citer    
Re: Etrange segfault avec gethostbyname
Envoyé par: ofkain

Salut,

Merci pour le coup de main, j'ai trouvé du coup. Cependant je ne comprends toujours pas pourquoi ce code ne voulais pas compiler sur ma gentoo mais par contre passais partout ailleurs.
Enfin le principal est que ca fonctionne.

Poste le Sunday 9 September 2007 12:26:40
Répondre     Citer    
Re: Etrange segfault avec gethostbyname
Envoyé par: Sve@r

Citation
ofkain
...mais par contre passais partout ailleurs...
C'est la caractéristique du comportement indéterminé => c'est que ça peut effectivement réussir de temps en temps même quasiment tout le temps. Sauf que quand ça plante on se mord les c....


L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Sunday 9 September 2007 20:52:31
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Etrange segfault avec gethostbyname
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons