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/


Raspunde prin e-mail lui