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:
par exemple avec cette addresse : http://bbs.cntv.cn/thread-14683404-1-1.htmlCan't resolve host: No space left on device
quand je fais un ping depuis mon systeme sur la meme addresse j'aidu coup je me dis que c'est pas vraiment mon code qui pose probleme. mais je mets quand meme:ping: unknown host http://bbs.cntv.cn/thread-14683404-1-1.html
la fonction qui appelle. elle renvois la page web
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
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 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.
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; }
quelqu'un sait comment regler se probleme?
Partager