next up previous contents
Next: inet_*() Up: Funkcje pomocnicze Previous: getserv*(), setservent(), endservent()   Contents

gethostby*(), sethostent(), endhostent()

Funkcje obsługujące przelicznik nazw (ang. name resolver). Resolver wykorzystuje do działania serwery DNS, serwery NIS oraz plik /etc/hosts. Jego konfiguracja znajduje się w plikach /etc/resolv.conf oraz /etc/host.conf.

  #include <netdb.h>
  
  struct hostent *gethostbyname(const char *name);
  
Na podstawie parametru name, który może być zarówno zapisany w postaci adresu IP, jak i nazwy domenowej funkcja zwraca stukturę:
   struct hostent {
      char    *h_name;        /* oficjalna nazwa hosta */
      char    **h_aliases;    /* nazwy alternatywne    */
      int     h_addrtype;     /* domena adresowa       */
      int     h_length;       /* długość adresu        */
      char    **h_addr_list;  /* lista adresów         */
   }
   #define h_addr  h_addr_list[0]  /* pierwszy z adresów    */
               
   struct hostent *gethostbyaddr(const char *addr, int len, int type);
  
Powyższa funkcja zwraca także strukturę hostent ale tym razem w inny sposób podajemy adres do szukania. Argument addr jest bowiem wskaźnikiem do zmiennej typu unsigned long int. Doprawdy niełatwo na to wpaść patrząc tylko na prototyp ... Argument len to długość adresu, a type to domena adresowa. Przyda się przykład:
  struct sockaddr_in saddr;
  struct hostent *hent;
  hent = getsockbyaddr((char *)&saddr.sin_addr.s_addr, sizeof(__u32), PF_INET);
  
Pora na dwie ostatnie funkcje z tej grupy:
  void sethostent(int stayopen);
  void endhostent(void);
  
Pierwsza z nich wywołana z parametrem stayopen równym 1 powoduje, że zapytania do serwera DNS będą się odbywały za pomocą stałego połączenia TCP. W przeciwnym wypadku będą używane datagramy UDP.



Paweł Niewiadomski
2000-10-17