新闻  |   论坛  |   博客  |   在线研讨会
关于socket的几个数据结构
mayer | 2009-07-12 13:35:26    阅读:1795   发布文章

关于socket的几个数据结构

struct sockaddr {
 uint8_t  sa_len;     /**< 地址长度, 一般不用*/
 sa_family_t sa_family;    /* 地址族, AF_xxx*/
 char  sa_data[14];   /* 14字节的协议地址*/
};

上面是通用的socket地址, 具体到Internet socket, 用下面的结构, 二者可以进行类型转换

1. IPv4
struct sockaddr_in {
 uint8_t  sin_len;    /**< 地址长度, 一般不用*/
 sa_family_t sin_family;    /**< 地址族*/
 in_port_t sin_port;    /**< 16Bit(2Byte) 端口号*/
 struct  in_addr sin_addr;  /**< 32Bit(4Byte) Internet地址*/
 char  sin_zero[8];   /**< 保留, 保证与sockaddr长度相同*/
};

其中, struct in_addr 就是32Bit IP地址:
struct in_addr {
 in_addr_t s_addr;     /**< 32Bit IPv4地址*/
};

利用函数inet_addr()可以将点分制的IP地址 (如: 192.168.0.1) 转换为上述结构地址, 不介意用.

2. IPv6
#define SIN6_LEN
struct sockaddr_in6 {
 uint8_t  sin_len;    /**< 地址长度, 一般不用*/
 sa_family_t sin6_family;   /**< 地址族*/
 in_port_t sin6_port;    /**< 16Bit(2Byte) 端口号*/
 uin32_t  sin6_flowinfo;   /**< 32Bit(4Byte) 连接标记通信量*/
 struct  in6_addr sin6_addr; /**< 128Bit(16Byte) Internet地址*/
};

其中, struct in6_addr 就是128Bit IP地址:
struct in6_addr {
 uint8_t s6_addr[16];
};

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客