Chinaunix首页 | 论坛 | 博客
  • 博客访问: 398956
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-03 18:24
文章分类

全部博文(75)

文章存档

2019年(1)

2018年(20)

2017年(14)

2016年(10)

2015年(30)

分类: LINUX

2017-04-23 21:58:44

1、struct sockaddr:在linux环境下,该结构体在/usr/include/linux/socket.h中定义,具体如下:
struct sockaddr {
    unsigned short sa_family;  /* 地址族, AF_xxx */
    char sa_data[14];  /* 14字节的协议地址*/
};

2、struct sockaddr_in:在linux环境下,结构体struct sockaddr_in在/usr/include/netinet/in.h中定义,具
体如下:
struct sockaddr_in {
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口号 */
struct in_addr sin_addr; /* Internet地址 */
unsigned char sin_zero[8]; /* 与struct sockaddr一样的长度 */
};

struct in_addr其实就是32位IP地址
struct in_addr {
        unsigned long s_addr;
};

BSD网络软件中包含了两个函数,用来在二进制地址格式和点分十进制字符串格式之间相互转换,但是这两个函数仅仅支持IPv4。
       in_addr_t inet_addr(const char *cp);
       char *inet_ntoa(struct in_addr in);
功能相似的两个函数同时支持IPv4和IPv6
       const char *inet_ntop(int domain, const void *addr, char *str, socklen_t size);
       int inet_pton(int domain, const char *str, void *addr);





阅读(721) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~