这是本系列的第二篇文章,这篇文章我将解决上篇文章中遗留的问题,并且提出几个新的问题。好了,我们来看一下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
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[2] = 0, data_.v6.sin6_addr.s6_addr[3] = 0