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

 C Discussion :

probleme de resolution addresse


Sujet :

C

  1. #1
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 800
    Points
    1 800
    Par défaut probleme de resolution addresse
    Bonjour j'ai un petit probleme:
    j'ai un petit programme que j'utilise pour telecharger des pages web et extraire le contenue en virant le code html.
    je testais generalement avec le meme site. puis j'ai commencer a tester avec n'importe quoi et parfois j'ai ce message:
    Can't resolve host: No space left on device
    par exemple avec cette addresse : http://bbs.cntv.cn/thread-14683404-1-1.html
    quand je fais un ping depuis mon systeme sur la meme addresse j'ai du coup je me dis que c'est pas vraiment mon code qui pose probleme. mais je mets quand meme:

    la fonction qui appelle. elle renvois la page web
    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
    56
    57
    58
    59
    char * getHTTPInfo(const char *szurl,unsigned int size,HeaderInfo *Headinfo)
    {
    	char *ip;
    	char *request;
    	int sock;
    	struct sockaddr_in *server;
    	int res;
    	char buffer[BUFSIZ+1];
    	URL *url = splitURL(szurl);
    	ip = get_ip(url->host);    //l'erreur vient d'ici.
    	if(ip==NULL)
    		return NULL;
     
    	sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    	if(sock<0)
    	{
    		perror("Can't create TCP socket");
    		return NULL;
    	}
     
    	server = (struct sockaddr_in*) malloc(sizeof(struct sockaddr_in*));
    	server->sin_family = AF_INET;
     
    	res = inet_pton(AF_INET,ip,(void*)(&(server->sin_addr.s_addr)));
    	if(res <0)
    	{
    		perror("can't set server->sin_addr.s_addr");
    		free(ip);
    		return NULL;
    	}
    	else if(res == 0)
    	{
    		printf("\"%s\" is not a valid IP\n",ip);
    		free(ip);
    		return NULL;
    	}
    	server->sin_port = htons(PORT);
    	free(ip);
     
    	//printf("Connection to %s (%s) ",host,ip);
    	res = connect(sock,(struct sockaddr *)server,sizeof(struct sockaddr));
    	if (res < 0)
    	{
    		perror("\t\t\t[failed]\n");
    		free(server);
    		close(sock);
    		return NULL;
    	}
     
    	//puts("\t\t\t [OK]");
     
    	request = build_get_query(url->host,url->page,Headinfo);
    //	sprintf(request,"",url->host);
    	//printf("Quering:\n%s",request);
    	releaseURL(&url);
            ....
            ...
            ...
    }
    la fonction qui get l'IP
    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
    char *get_ip(const char *host)
    {
    	struct hostent *hent;
    	unsigned short int ipv4len = 15;			//xxx.xxx.xxx.xxx
    	char *ipv4 = (char *)malloc(ipv4len +1);
    	if (ipv4==NULL)
    		return NULL;
    	memset(ipv4,0,ipv4len+1);
    	if((hent = gethostbyname(host))==NULL)
    	{
    		fprintf(stderr,"can't get IP\n");
    		free(ipv4);
    		return NULL;
    	}
    	if(inet_ntop(AF_INET,(void *)hent->h_addr_list[0],ipv4,ipv4len) == NULL)
    	{
    		perror("Can't resolve host");
    		free(ipv4);
    		return NULL;
    	}
    	return ipv4;
    }
    la fonction get_ip n'est pas de moi je l'ai choppe je sais plus ou il y a deja un moment. mais visiblement c'est inet_ntop qui echoue.
    quelqu'un sait comment regler se probleme?
    Petit lien vers mon premier jeux SDL2/C
    http://store.steampowered.com/app/72..._Soul_Of_Mask/
    la suite? ca vient,ca vient!

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Euh, oui, « No space left on device », ça veut dire que ton disque est plein, ou au moins la partition de swap si tu en utilises une.

    M'enfin, tu devrais en sentir les effets sur le reste de ta machine, aussi.

  3. #3
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 800
    Points
    1 800
    Par défaut
    ben ca , ca m'etonnerai. tiens voici la commande free
    total used free shared buffers cached
    Mem: 1979208 1851716 127492 0 153156 321464
    -/+ buffers/cache: 1377096 602112
    Swap: 4194300 102620 4091680
    honnetement pas de probleme de memoire. sinon content que ce ne soit pas mon code qui soit incriminer.
    Petit lien vers mon premier jeux SDL2/C
    http://store.steampowered.com/app/72..._Soul_Of_Mask/
    la suite? ca vient,ca vient!

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Difficile d'être catégorique.

    — Soit l'appel échoue pour une raison qui n'est pas imputable au système, errno n'est pas mis à jour et, donc, le message d'erreur n'a rien à voir ;
    — Soit ton programme a une fuite de mémoire, qui finit par remplir le swap, et le vide automatiquement lorsque ton processus prend fin (ou se fait tuer par le système) ;
    — Soit ton programme utilise une partition spéciale du système de fichier telle que « /tmp » qui, elle, est pleine.

  5. #5
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 800
    Points
    1 800
    Par défaut
    valgrind me dit qu'il n'a pas detecte de fuite, mieux ce resultat est tres aleatoire car le programe telecharege une tonne de lien sur un site d'informaiton (bbc news)
    et doit telecharger les pages une a une, donc dans mon log jai l'erreur X fois sur 100 avec X variant entre 0 et 60 on va dire. ca c'est pour le point 2.
    mon programme tourne sur 2 machine sur l'un c'est sous opt et l'autre c'est home avec dans le premier cas beaucoup de 100aine de giga et dans le second 1.8go de libre.
    j'avoue ne plus suivre, sinon si tu veux je te poste tout le code mais ca va vraiment etre long.
    Petit lien vers mon premier jeux SDL2/C
    http://store.steampowered.com/app/72..._Soul_Of_Mask/
    la suite? ca vient,ca vient!

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    En fait, ce n'est pas tant les pages qu'il télécharge lui que la mémoire qu'il consomme pendant l'opération et qui pourrait provoquer le message que tu as obtenu. Si ton code est vraiment trop gros, tu peux utiliser pastebin, par exemple, ou le mettre en ligne si tu as une page personnelle.

  7. #7
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 800
    Points
    1 800
    Par défaut
    yep, je vais voir pour le code. mais ca va prendre un peu de temps je suis en weekend des ce jeudi et je pense pas rester dans les parages
    Petit lien vers mon premier jeux SDL2/C
    http://store.steampowered.com/app/72..._Soul_Of_Mask/
    la suite? ca vient,ca vient!

  8. #8
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 800
    Points
    1 800
    Par défaut
    c'est bon j'ai trouver sans vraiment comprendre ce qui close.
    c'est la ligne 15, la condition qui parfois est fausse.
    j'ai chercher un peu sur le net et j'ai trouver un nslookup basic en C
    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
     
              /* Bare nslookup utility (w/ minimal error checking) */
              #include <stdio.h>          /* stderr, stdout */
              #include <netdb.h>          /* hostent struct, gethostbyname() */
              #include <arpa/inet.h>      /* inet_ntoa() to format IP address */
              #include <netinet/in.h>     /* in_addr structure */
     
              int main(int argc, char **argv) {
                struct hostent *host;     /* host information */
                struct in_addr h_addr;    /* internet address */
                if (argc != 2) {
                  fprintf(stderr, "USAGE: nslookup <inet_address>\n");
                  exit(1);
                }
                if ((host = gethostbyname(argv[1])) == NULL) {
                  fprintf(stderr, "(mini) nslookup failed on '%s'\n", argv[1]);
                  exit(1);
                }
                h_addr.s_addr = *((unsigned long *) host->h_addr_list[0]);
                fprintf(stdout, "%s\n", inet_ntoa(h_addr));
                exit(0);
              }
    donc j'ai readapte mon code de getIP
    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
    char *get_ip(const char *host)
    {
    	struct hostent *hent;
    	unsigned short int ipv4len = 15;			//xxx.xxx.xxx.xxx
    	char *ipv4 = (char *)malloc(ipv4len +1);
    	if (ipv4==NULL)
    		return NULL;
    	memset(ipv4,0,ipv4len+1);
    	
    	if((hent = gethostbyname(host))==NULL)
    	{
    		fprintf(stderr,"can't get IP\n");
    		free(ipv4);
    		return NULL;
    	}
    	if(inet_ntop(AF_INET,(void *)hent->h_addr_list[0],ipv4,ipv4len) == NULL)
    	{
    		perror("Can't resolve host");
    		struct in_addr h_addr;
    		
    		h_addr.s_addr = *((unsigned long *) hent->h_addr_list[0]);
    	    sprintf(ipv4, inet_ntoa(h_addr));
    	}
    	/*if(inet_ntop(AF_INET,(void *)hent->h_addr_list[0],ipv4,ipv4len) == NULL)
    	{
    		perror("Can't resolve host");
    		free(ipv4);
    		return NULL;
    	}*/
    	return ipv4;
    }
    du coup il m'affiche toujours l'erreur sur certain site ex: image.baidu.com 100% sur qu'il y a erreur mais parcontre j'ai bien l'IP apres. en faite je devrait me passer de la condition mais comme j'ai pas trop compris pour quoi ca coince je garde encore.
    t'as une idee sur ce qui se passe?
    Petit lien vers mon premier jeux SDL2/C
    http://store.steampowered.com/app/72..._Soul_Of_Mask/
    la suite? ca vient,ca vient!

Discussions similaires

  1. Problème de résolution graphique sous linux debian
    Par jejerome dans le forum Matériel
    Réponses: 7
    Dernier message: 25/03/2006, 00h51
  2. Problème de résolution de nom dans un réseau local
    Par bebert_2002 dans le forum Réseau
    Réponses: 9
    Dernier message: 08/08/2005, 12h20
  3. Problèmes de résolution de nom
    Par Sékiltoyai dans le forum Réseau
    Réponses: 11
    Dernier message: 05/08/2005, 10h23
  4. Problème de résolution de lien sous MDK
    Par viddak dans le forum Linux
    Réponses: 2
    Dernier message: 25/03/2004, 19h51
  5. Problème de résolution de dns
    Par kvaan dans le forum Réseau
    Réponses: 4
    Dernier message: 01/03/2004, 20h28

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