博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hostent h_addr_list
阅读量:4204 次
发布时间:2019-05-26

本文共 1460 字,大约阅读时间需要 4 分钟。

struct  hostent {        char    FAR * h_name;           /* official name of host */        char    FAR * FAR * h_aliases;  /* alias list */        short   h_addrtype;             /* host address type */        short   h_length;               /* length of address */        char    FAR * FAR * h_addr_list; /* list of addresses */#define h_addr  h_addr_list[0]          /* address, for backward compat */};

h_addr_list其实是一个指针数组,数组中每个元素都是in_addr型指针。

typedef struct in_addr {        union {                struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;                struct { USHORT s_w1,s_w2; } S_un_w;                ULONG S_addr;        } S_un;#define s_addr  S_un.S_addr /* can be used for most tcp & ip code */#define s_host  S_un.S_un_b.s_b2    // host on imp#define s_net   S_un.S_un_b.s_b1    // network#define s_imp   S_un.S_un_w.s_w2    // imp#define s_impno S_un.S_un_b.s_b4    // imp ##define s_lh    S_un.S_un_b.s_b3    // logical host} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;

因为hostent结构支持多种地址类型,所以其定义的h_addr_list是char **型。gethostbyname以后,实际存储情况是这样:

hostent->h_addr_list[0][0] = 127hostent->h_addr_list[0][1] = 0hostent->h_addr_list[0][2] = 0hostent->h_addr_list[0][3] = 1

得到的地址是网络字节顺序。转成正常的字符:

char *ip;ip = inet_ntoa(*(struct in_addr *)*phost->h_addr_list);

向sockaddr_in赋值:

struct sockaddr whereto;struct sockaddr_in *to;memset(&whereto, 0, sizeof(struct sockaddr));to = (struct sockaddr_in *)&whereto;memcpy(&to->sin_addr, hp->h_addr, hp->h_length);

 

转载地址:http://dssli.baihongyu.com/

你可能感兴趣的文章
软件测试框架介绍
查看>>
软件自动化测试框架的发展
查看>>
实现haproxy+LNMT负载均衡架构
查看>>
论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取
查看>>
论文浅尝 | 融合多粒度信息和外部语言知识的中文关系抽取
查看>>
论文浅尝 | GMNN: Graph Markov Neural Networks
查看>>
廖雪峰Python教程 学习笔记3 hello.py
查看>>
从内核看epoll的实现(基于5.9.9)
查看>>
python与正则表达式
查看>>
安装.Net Framework 4.7.2时出现“不受信任提供程序信任的根证书中终止”的解决方法
查看>>
input type=“button“与input type=“submit“的区别
查看>>
解决Github代码下载慢问题!
查看>>
1.idea中Maven创建项目及2.对idea中生命周期的理解3.pom文件夹下groupId、artifactId含义
查看>>
LeetCode-栈|双指针-42. 接雨水
查看>>
stdin,stdout,stderr详解
查看>>
Linux文件和设备编程
查看>>
文件描述符
查看>>
终端驱动程序:几个简单例子
查看>>
登录linux密码验证很慢的解决办法
查看>>
fcntl函数总结
查看>>