Linux网络编程- inet_pton()函数

inet_pton() 函数是 “Internet presentation to network” 的缩写,用于将 IP 地址的表现形式(例如字符串形式的 “127.0.0.1”)转换为其网络字节序的二进制形式。这个函数支持 IPv4 和 IPv6 地址。

函数原型:

int inet_pton(int af, const char *src, void *dst);

参数:

  1. af: 地址族 (Address Family)。常见的值为 AF_INET(对于 IPv4)和 AF_INET6(对于 IPv6)。

  2. src: 指向字符串形式的 IP 地址的指针。

  3. dst: 一个指向存储转换后的二进制地址的缓冲区的指针。对于 IPv4,这应该是一个指向 struct in_addr 的指针;对于 IPv6,这应该是一个指向 struct in6_addr 的指针。

返回值:

  • 成功时返回1。

  • 如果输入地址不是有效的表现形式,返回0。

  • 出错时返回-1,并设置 errno 为具体的错误代码。

使用和注意事项:

  1. 当设置套接字地址结构(如 struct sockaddr_instruct sockaddr_in6)时,通常需要使用 inet_pton() 来转换用户提供或其他来源的字符串 IP 地址。

  2. 使用 inet_pton() 替代过时的 inet_aton()inet_addr() 函数可以提供更好的 IPv6 兼容性和错误处理。

示例:

#include 
#include 

int main() {
    const char *ip_str = "192.168.1.1";
    struct in_addr ip_addr;  // for IPv4

    if (inet_pton(AF_INET, ip_str, &ip_addr) <= 0) {
        perror("inet_pton");
        return 1;
    }

    printf("Binary representation of IP: %u\n", ip_addr.s_addr);
    return 0;
}

这个简单的示例展示了如何使用 inet_pton() 函数将 IPv4 地址字符串 “192.168.1.1” 转换为其二进制网络字节序形式,并将结果存储在 struct in_addr 结构中。

你可能感兴趣的:(C,Linux,linux,网络)