UNIX网络编程读书笔记:名字与地址转换
UNIX网络编程读书笔记:名字与地址转换
hostent *gethostbyname( *
本函数返回的非空指针指向如下的hostent结构:
*h_name;
**h_aliases;
h_addrtype;
h_length;
**h_addr_list;
hostent *gethostbyaddr( *addr, socklen_t len,
本函数返回一个同样指向hostent结构的指针。
addr参数实际上不是char *类型,而是一个指向存放IPv4地址的某个in_addr结构的指针;
len参数是这个结构的大小:对于IPv4地址为4;
family参数为AF_INET。
servent *getservbyname( *servname, *
本函数返回的非空指针指向如下的servent结构:
*s_name;
**s_aliases;
s_port;
*s_proto;
服务名参数servname必须指定。如果同时指定了协议(即protoname参数为非空指针),那么指定服务必须有匹配的协议。有些因特网服务既用TCP也用UDP提供(例如DNS),其他因特网服务则仅仅支持单个协议(例如FTP要求使用TCP)。如果protoname未指定而servname指定服务支持多个协议,那么返回哪个端口号取决于实现。
servent结构中我们关心的主要是端口号。既然端口号是以网络字节序返回的,把它存放到套接口地址结构时绝不能调用htons。
本函数的典型调用如下:
servent *= getservbyname(, = getservbyname(, );
servent *getservbyport( port, *
port参数的值必须为网络字节序。本函数的典型调用如下:
servent *= getservbyport(htons(), = getservbyport(htons(), );
getaddrinfo( *hostname, * addrinfo *hints, addrinfo **——成功;非0——出错
本函数通过result指针参数返回一个指向addrinfo结构链表的指针,而addrinfo结构定义在头文件<netdb.h>中:
ai_flags;
ai_family;
ai_socktype;
ai_protocol;
*ai_canonname;
sockaddr *ai_addr;
addrinfo *ai_next;
其中,
hostname参数是一个主机名或地址串(IPv4的点分十进制数串或IPv6的十六进制数串)。
service参数是一个服务名或十进制端口号数串。
hints参数可以是一个空指针,也可以是一个指向某个addrinfo结构的指针,调用者在这个结构中填入关于期望返回的信息类型的暗示。
hints结构中调用者可以设置的成员有:
- ai_flags(零个或多个在一起的AI_xxx值)
- ai_family(某个AF_xxx值)
- ai_socktype(某个SOCK_xxx值)
- ai_protocol
其中ai_flags成员可用的标志值及其含义如下:
getnameinfo( sockaddr * * *serv, socklen_t servlen, ——成功,非0——出错
sockaddr指向一个套接口地址结构。
待返回的2个直观可读的字符串由调用者预先分配存储空间:host和hostlen指定主机字符串;serv和servlen指定服务字符串。如果调用者不想返回主机字符串,那就指定hostlen为0。同样,把servlen指定为0就是不想返回服务字符串。头文件<netdb.h>中定义了2个常值用于分配这两个存储空间:NI_MAXHOST给出主机字符串存储空间的最大长度,值为1025;NI_MAXSERV给出服务字符串存储空间的最大长度,值为32.
6个可指定的标志flags,用于改变getnameinfo的操作:
常值
说明
NI_DGRAM
NI_NAMEREQD
NI_NOFQDN
NI_NUMERICHOST
NI_NUMERICSCOPE
NI_NUMERICSERV
数据报服务
若不能从地址解析出名字则返回错误
只返回FQDN的主机名部分
以数串格式返回主机字符串
以数串格式返回范围标识字符串
以数串格式返回服务字符串
四类网络相关信息总结如下表:
信息
数据文件
结构
键值查找函数
主机
网络
协议
服务
/etc/hosts
/etc/networks
/etc/protocols
/etc/services
hostent
netent
protoent
servent
gethostbyaddr,gethostbyname
getnetbyaddr,getnetbyname
getprotobyname,getprotobynumber
getservbyname,getservbyport
本函数返回一个同样指向hostent结构的指针。
addr参数实际上不是char *类型,而是一个指向存放IPv4地址的某个in_addr结构的指针;
len参数是这个结构的大小:对于IPv4地址为4;
family参数为AF_INET。
servent *getservbyname( *servname, *
本函数返回的非空指针指向如下的servent结构:
*s_name;
**s_aliases;
s_port;
*s_proto;
服务名参数servname必须指定。如果同时指定了协议(即protoname参数为非空指针),那么指定服务必须有匹配的协议。有些因特网服务既用TCP也用UDP提供(例如DNS),其他因特网服务则仅仅支持单个协议(例如FTP要求使用TCP)。如果protoname未指定而servname指定服务支持多个协议,那么返回哪个端口号取决于实现。
servent结构中我们关心的主要是端口号。既然端口号是以网络字节序返回的,把它存放到套接口地址结构时绝不能调用htons。
本函数的典型调用如下:
servent *= getservbyname(, = getservbyname(, );
servent *getservbyport( port, *
port参数的值必须为网络字节序。本函数的典型调用如下:
servent *= getservbyport(htons(), = getservbyport(htons(), );
getaddrinfo( *hostname, * addrinfo *hints, addrinfo **——成功;非0——出错
本函数通过result指针参数返回一个指向addrinfo结构链表的指针,而addrinfo结构定义在头文件<netdb.h>中:
ai_flags;
ai_family;
ai_socktype;
ai_protocol;
*ai_canonname;
sockaddr *ai_addr;
addrinfo *ai_next;
其中,
hostname参数是一个主机名或地址串(IPv4的点分十进制数串或IPv6的十六进制数串)。
service参数是一个服务名或十进制端口号数串。
hints参数可以是一个空指针,也可以是一个指向某个addrinfo结构的指针,调用者在这个结构中填入关于期望返回的信息类型的暗示。
hints结构中调用者可以设置的成员有:
- ai_flags(零个或多个在一起的AI_xxx值)
- ai_family(某个AF_xxx值)
- ai_socktype(某个SOCK_xxx值)
- ai_protocol
其中ai_flags成员可用的标志值及其含义如下:
getnameinfo( sockaddr * * *serv, socklen_t servlen, ——成功,非0——出错
sockaddr指向一个套接口地址结构。
待返回的2个直观可读的字符串由调用者预先分配存储空间:host和hostlen指定主机字符串;serv和servlen指定服务字符串。如果调用者不想返回主机字符串,那就指定hostlen为0。同样,把servlen指定为0就是不想返回服务字符串。头文件<netdb.h>中定义了2个常值用于分配这两个存储空间:NI_MAXHOST给出主机字符串存储空间的最大长度,值为1025;NI_MAXSERV给出服务字符串存储空间的最大长度,值为32.
6个可指定的标志flags,用于改变getnameinfo的操作:
常值
说明
NI_DGRAM
NI_NAMEREQD
NI_NOFQDN
NI_NUMERICHOST
NI_NUMERICSCOPE
NI_NUMERICSERV
数据报服务
若不能从地址解析出名字则返回错误
只返回FQDN的主机名部分
以数串格式返回主机字符串
以数串格式返回范围标识字符串
以数串格式返回服务字符串
四类网络相关信息总结如下表:
信息
数据文件
结构
键值查找函数
主机
网络
协议
服务
/etc/hosts
/etc/networks
/etc/protocols
/etc/services
hostent
netent
protoent
servent
gethostbyaddr,gethostbyname
getnetbyaddr,getnetbyname
getprotobyname,getprotobynumber
getservbyname,getservbyport
port参数的值必须为网络字节序。本函数的典型调用如下:
servent *= getservbyport(htons(), = getservbyport(htons(), );
getaddrinfo( *hostname, * addrinfo *hints, addrinfo **——成功;非0——出错
本函数通过result指针参数返回一个指向addrinfo结构链表的指针,而addrinfo结构定义在头文件<netdb.h>中:
ai_flags;
ai_family;
ai_socktype;
ai_protocol;
*ai_canonname;
sockaddr *ai_addr;
addrinfo *ai_next;
其中,
hostname参数是一个主机名或地址串(IPv4的点分十进制数串或IPv6的十六进制数串)。
service参数是一个服务名或十进制端口号数串。
hints参数可以是一个空指针,也可以是一个指向某个addrinfo结构的指针,调用者在这个结构中填入关于期望返回的信息类型的暗示。
hints结构中调用者可以设置的成员有:
- ai_flags(零个或多个在一起的AI_xxx值)
- ai_family(某个AF_xxx值)
- ai_socktype(某个SOCK_xxx值)
- ai_protocol
其中ai_flags成员可用的标志值及其含义如下:
getnameinfo( sockaddr * * *serv, socklen_t servlen, ——成功,非0——出错
sockaddr指向一个套接口地址结构。
待返回的2个直观可读的字符串由调用者预先分配存储空间:host和hostlen指定主机字符串;serv和servlen指定服务字符串。如果调用者不想返回主机字符串,那就指定hostlen为0。同样,把servlen指定为0就是不想返回服务字符串。头文件<netdb.h>中定义了2个常值用于分配这两个存储空间:NI_MAXHOST给出主机字符串存储空间的最大长度,值为1025;NI_MAXSERV给出服务字符串存储空间的最大长度,值为32.
6个可指定的标志flags,用于改变getnameinfo的操作:
常值
说明
NI_DGRAM
NI_NAMEREQD
NI_NOFQDN
NI_NUMERICHOST
NI_NUMERICSCOPE
NI_NUMERICSERV
数据报服务
若不能从地址解析出名字则返回错误
只返回FQDN的主机名部分
以数串格式返回主机字符串
以数串格式返回范围标识字符串
以数串格式返回服务字符串
四类网络相关信息总结如下表:
信息
数据文件
结构
键值查找函数
主机
网络
协议
服务
/etc/hosts
/etc/networks
/etc/protocols
/etc/services
hostent
netent
protoent
servent
gethostbyaddr,gethostbyname
getnetbyaddr,getnetbyname
getprotobyname,getprotobynumber
getservbyname,getservbyport
sockaddr指向一个套接口地址结构。
待返回的2个直观可读的字符串由调用者预先分配存储空间:host和hostlen指定主机字符串;serv和servlen指定服务字符串。如果调用者不想返回主机字符串,那就指定hostlen为0。同样,把servlen指定为0就是不想返回服务字符串。头文件<netdb.h>中定义了2个常值用于分配这两个存储空间:NI_MAXHOST给出主机字符串存储空间的最大长度,值为1025;NI_MAXSERV给出服务字符串存储空间的最大长度,值为32.
6个可指定的标志flags,用于改变getnameinfo的操作:
常值 | 说明 |
NI_DGRAM
NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSCOPE NI_NUMERICSERV |
数据报服务
若不能从地址解析出名字则返回错误 只返回FQDN的主机名部分 以数串格式返回主机字符串 以数串格式返回范围标识字符串 以数串格式返回服务字符串 |
网络
协议
服务
/etc/networks
/etc/protocols
/etc/services
netent
protoent
servent
getnetbyaddr,getnetbyname
getprotobyname,getprotobynumber
getservbyname,getservbyport
评论暂时关闭