28 Eylül 2016 Çarşamba

gethostbyaddr metodu

Giriş
Big endian yani network formatındaki ip değerini string'e çevirir.

Metod aşağıdaki gibi çalışır.
UDP sunucu soketinde bize veri gönderenin adresini almak için şöyle yaparız.
struct sockaddr_in clientaddr; /* client addr */
int clientlen = sizeof(clientaddr);
int n = recvfrom(sockfd, ...,...,...,
     (struct sockaddr *) &clientaddr, &clientlen);
clientaddr nesnesindeki ip adresini string'e çevirmek için kullanırız.
Şöyle yaparız.
struct hostent *hostp;
hostp = gethostbyaddr((const char *)&clientaddr,
          sizeof(clientaddr), AF_INET);
if (hostp != NULL) {
  ...
}
Parametre
Parametre açıklaması şöyle
[...] The host address argument is a pointer to a struct of a type depending on the address type, for example a struct in_addr * (probably obtained via a call to inet_addr(3)) for address typeAF_INET.
Hata Kodu
Hata kodu errno değişkeninde değil h_errno değişkeninde saklanır. Açıklaması şöyle.
[...[ The gethostbyname() and gethostbyaddr() functions return the hostent structure or a null pointer if an error occurs. On error, the h_errno variable holds an error number.
Hata kodları şöyle
The variable h_errno can have the following values:
  • HOST_NOT_FOUND
    The specified host is unknown.
  • NO_ADDRESS or NO_DATA
    The requested name is valid but does not have an IP address.
  • NO_RECOVERY
    A nonrecoverable name server error occurred.
  • TRY_AGAIN
    A temporary error occurred on an authoritative name server. Try again later.

Hiç yorum yok:

Yorum Gönder