14 Eylül 2017 Perşembe

inet_pton metodu

Giriş
inet_pton metodu en yeni ve kullanmamız gereken POSIX API'si. Şekilde inet_pton'un v4 ve v6 için çalıştığı görülebilir.

Windows
Bu metod POSIX'te tanımlı ancak Windows'ta birebir tanımlı değil. Windows'taki karşılığı InetNtop
metodu.Portable kod için boost::asio kullanılabilir.

Döndürülen Değer
İşlem başarılı ise 1 döner. Başarısız ise 0 veya -1 döner. Yani sonuca <=0 diye bakmak yeterli.

Kullanım
Verilen "metin IP adresini" long'a çevirir. Hem IPv6 hem de IPv4 ile çalıştığı için inet_addr() metoduna tercih edilmelidir. Şu satırı dahil ederiz.
#include <arpa/inet.h>
Örnek - IPv4
Şöyle yaparız.
sockaddr_in remoteaddr;

const char addr[15] = "127.0.0.1";
inet_pton(AF_INET, addr, &remoteaddr.sin_addr);
Örnek - IPv4
Şöyle yaparız.
struct sockaddr_in remoteaddr;
inet_pton(AF_INET, "10.0.0.2", &remoteaddr.sin_addr);
Örnek - IPv4 + connect
Şöyle yaparız
struct sockaddr_in serv_addr; 

memset(&serv_addr, '0', sizeof(serv_addr)); 

serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(5000); 

if(inet_pton(AF_INET, argv[1], &serv_addr.sin_addr)<=0)
{
  printf("\n inet_pton error occured\n");
  return 1;
} 

if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
  printf("\n Error : Connect Failed \n");
  return 1;
} 
Örnek - IPv6
Şöyle yaparız. Yapının diğer alanlarının doldurulmasının sebebi yapının connect() metodu ile kullanılması.
struct sockaddr_in6 remoteaddr;
remote.sin6_family = AF_INET6;
remote.sin6_port = 0;
remote.sin6_flowinfo = 0;
remote.sin6_scope_id = 0;

inet_pton(AF_INET6, "2001:470:x:x:y:y:y:dd7b", &(remote.sin6_addr));



Hiç yorum yok:

Yorum Gönder