On Tue, 26 Aug 2003 10:23:46 +0300
Serghei Amelian <[EMAIL PROTECTED]> wrote:
> Am facut o functie care returneaza numele unui IP. Am o nedumerire:
> gethostbyaddr returneaza un pointer la o structura de tip "struct
> hostent". Eu nu aloc spatiu pentru aceasta structura, ci se pare ca de
> asta se ocupa gethostbyaddr. Dar asta nu inseamna ca se face un malloc
> pe undeva? Dar nu
gethostbyaddr() returneaza pointer la o structura statica deci nu e
nevoie sa faci free(). Oricum structura se rescrie la apeluri succesive
asa ca ar fi bine sa copiezi de acolo datele care iti trebuiesc.
O alta obeservatie ar fi ca nu prea e ortodox sa returnezi pointeri la
structuri statice alocate in procedura. Si ca sa nu il bagi in ceata pe
utilizatorul functiei e bine sa pui rezultatul ca parametru si sa lasi
apelantul sa se ocupe de alocare /dealocare.
Ex:
int get_host(const char *ip, char * host)
{
struct in_addr in;
struct hostent *hp;
if(inet_aton(ip, &in)) {
if(hp = gethostbyaddr( (char*) &in.s_addr,
sizeof(in.s_addr),
AF_INET)) {
strncpy(host, hp->h_name, MAX_HOST_LENGTH);
return 1;
}
}
return 0;
}
---
Detalii despre listele noastre de mail: http://www.lug.ro/