18 Ağustos 2017 Cuma

gethostbyname metodu

Giriş
Şu satırı dahil ederiz.
#include <netdb.h>
Bu metod yerine getaddrinfo metodunu tercih etmek gerekir.

İmzası şöyle
struct hostent *gethostbyname(const char *name);
hosteent yapısı şöyle
struct hostent {
  char  *h_name;            /* official name of host */
  char **h_aliases;         /* alias list */
  int    h_addrtype;        /* host address type */
  int    h_length;          /* length of address */
  char **h_addr_list;       /* list of addresses */
}
Metod aşağıdaki gibi çalışır. İsim çözümlemesi yapar. İsim yerine string IP vermenin ne döndüreceği belirsiz
Şöyle yaparız.
struct hostent *hent = gethostbyname("www.yahoo.com");
Sunucu kontrol etmek için şöyle yaparız.
if (hent== NULL) {
  std::cerr << "Error when using gethostbyname" << std::endl;
  ...
}
Hata Kodu
Eğer işlem başarısız ise hata kodu h_errno değişkenine atanır.

Başarılı İse
Eğer işlem başarılı ise şöyle yaparız. Burada gethostbyname() metodunun döndürdüğü 4 byte IP adresi yeni bir sockarrd_in yapısını doldurmak için kullanılıyor.
struct sockaddr_in servaddr;
int port = ...;

memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(port);

memcpy(&servaddr.sin_addr, h -> h_addr, h -> h_length);
Daha sonra bağlanma işlemi yapılabilir. Şöyle yaparız.
int rval;
rval = connect(socket, (struct sockaddr *) &servaddr, sizeof(servaddr));


Hiç yorum yok:

Yorum Gönder