原创 关于socket的几个数据结构

2009-6-26 11:36 2749 7 7 分类: MCU/ 嵌入式

关于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];
};


【2007-04-10】

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /3 下一条