Boost Asio库的学习与探究(二)

本文详细探讨了Boost.Asio库中IP地址和端口的处理方式,包括根据协议族设置数据的构造函数、联合体设计以适应IPv4和IPv6、地址和端口的获取以及比较操作。同时,提到了私有构造函数的使用问题,为后续学习留下悬念。
摘要由CSDN通过智能技术生成
这是本系列的第二篇文章,这篇文章我将解决上篇文章中遗留的问题,并且提出几个新的问题。好了,我们来看一下boost::asio::ip::detail::endpoint.同样的我们先来看一下它的数据成员,在以后的文章之文章之中我们都将采取这个过程,不再多说。 ` union data_union { boost::asio::detail::socket_addr_type base; boost::asio::detail::sockaddr_in4_type v4; boost::asio::detail::sockaddr_in6_type v6; } data_;` 这里定义了一个联合体data_;这个结构体是基本socket的IP地址。我们可以看到 有v4、v6还有一个是基本地址。ok,下面我们来看其成员函数: 1.默认构造函数: `endpoint::endpoint()
data_()
{
data_.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
data_.v4.sin_port = 0;
data_.v4.sin_addr.s_addr = BOOST_ASIO_OS_DEF(INADDR_ANY);
}`
可以看到默认构造函数是ipv4连接的一个构造函数。
2.协议族,端口号
endpoint::endpoint(int family, unsigned short port_num)
  : data_()
{
  using namespace std; // For memcpy.
  if (family == BOOST_ASIO_OS_DEF(AF_INET))
  {
    data_.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
    data_.v4.sin_port =
      boost::asio::detail::socket_ops::host_to_network_short(port_num);
    data_.v4.sin_addr.s_addr = BOOST_ASIO_OS_DEF(INADDR_ANY);
  }
  else
  {
    data_.v6.sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
    data_.v6.sin6_port =
      boost::asio::detail::socket_ops::host_to_network_short(port_num);
    data_.v6.sin6_flowinfo = 0;
    data_.v6.sin6_addr.s6_addr[0] = 0; data_.v6.sin6_addr.s6_addr[1] = 0;
    data_.v6.sin6_addr.s6_addr[2] = 0, data_.v6.sin6_addr.s6_addr[3] = 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值