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:
Citation:
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:
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:
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?