首页 > 技术文章 > 相关的结构体

creature-lurk 2021-07-17 04:10 原文

1.sockaddr结构体

struct sockaddr{
    unsigned short sa_family;    //地址类型,AF_XXX
    char sa_data[14];                //14字节的端口和地址
}

2.sockaddr_in结构体

struct sockaddr_in{
    short int sin_family;        //地址类型
    unsigned short int sin_port;    //端口号
    struct in_addr sin_addr;    //地址
    unsigned char sin_zero[8];    //为了保持与struct 的长度sockaddr一样的长度
}

3.in_addr结构体

struct addr_in{
    unsigned long s_addr;    //地址
}

4.hostent结构体

struct hostent { 
    char *h_name; //主机名。 
    char**h_aliases;//主机所有别名构成的字符串数组,同一IP可绑定多个域名。
    int h_addrtype; //主机IP地址的类型,例如IPV4 (AF INET) 还是IPV6。 
    int h_length; //主机IP地址长度,IPV4地址为4, IPV6地址则为16。
    char **h_addr_list; // 主机的ip地址,以网络字节序存储。 
}; 

#define h_addr  h_addr list[0] /* for backward compatibility */

// gethostbyname函数可以利用字符串格式的域名获得IP网络字节顺序地址。 
struct hostent *gethostbyname(const char *name);

5.函数

  1) int inet _aton(const char *cp, struct in_addr *inp); 将一个字符串IP地址转换为一个32位的网络字节序IP地址。如果这个函数成功,函数 的返回值非零,如果输入地址不正确则会返回零。使用这个函数并没有错误码存放在 errno中, 所以它的值会被忽略。

  2) char *inet_ntoa(struct in_addr in); 把网络字节序IP地址转换成字符串的IP地址。

  3) in_addr_t inet_addr(const char *cp); 和第一个差不多

推荐阅读