InetAddress Class
源码阅读(muduo::net)
如有问题,欢迎交流!!!
对网络地址的封装。
数据成员
union{stuct sockaddr_in addr_;struct sockaddr_in6 addr6_;}
也就是说,对于一个
InetAddress Class
类型的对象来说,它既可以是一个ipv4,也可以是一个ipv6。反正大多数基本api输入的参数都要sockaddr
,然后自己检查类型。我们可以先获取addr_
,然后再根据sin_family
做最终确定。就像sockets::toIpPort
一样。
函数成员
InetAddress(unit16_t port,bool loopbackOnly,bool ipv6)
构造函数,初始化数据成员
port
:决定端口号
loopbackOnly
:决定是使用 回 送 地 址 回送地址 回送地址还是 0.0.0.0 0.0.0.0 0.0.0.0
ipv6
:决定协议族
InetAddress(StringArg ip,uint16_t port,bool ipv6)
构造函数,初始化数据成员
根据ipv6
和ip
的格式决定初始化哪一个数据成员
InetAddress(const struct sockaddr_in& addr)
InetAddress(const struct sockaddr_in6& addr)
干什么的一目了然
const struct sockaddr* getSockAddr()
获取地址
void setSockAddrInet6(const struct sockaddr_in6& addr6)
给
addr6_
赋值
sa_family_t family()
获取协议族
string toIp()
调用
sockets::toIp()
获取地址
string toIpPort()
调用
sockets::toIpPort()
获取地址的ip地址和端口号
uint16_t port()
获取ip地址的端口号
uint32_t ipv4NetEndian()
获取网络地址格式的ip地址,注意在确定地址是ipv4再进行操作。
uint16_t portNetEndian()
网络地址格式的端口号
bool resolve(StringArg hostname,InetAddress* out)
调用
gethostbyname_r
获取网站名hostname
对应的ip地址
void setScopeId(uint32_t scope_id)
设置ipv6地址的
sin6_scope_id