关于WinSock2包装器的设计思路

时间:2014-03-20 13:30:53

标签: c++ sockets networking winsock winsock2

我们有班级Ip::AddressIp::Endpoint

第一个设计理念。

Ip::Address
Ip::Address::Address(const std::string& stringRepresentation)

此类将在内部表示为in_addrin6_addr

Ip::Endpoint
Ip::Endpoint::Endpoint(const Ip::Address& address, const std::uint16_t port)

此类将包含Ip::Address,并在内部表示为sockaddr_insockaddr_in6

这是我提出的设计,但我并不满意。原因如下。我们来看看IPv4案例吧。 Ip::Endpoint内部表示为sockaddr_in,其中包含in_addr。由于Ip::Endpoint还包含内部表示为Ip::Address的{​​{1}},in_addr结构会在in_addr内显示两次。

第二个设计理念。

Ip::Endpoint

此类将在内部表示为Ip::Address Ip::Address::Address(const std::string& stringRepresentation) sockaddr_in

sockaddr_in6

此类将包含Ip::Endpoint Ip::Endpoint::Endpoint(const Ip::Address& address, const std::uint16_t port) 并使用其内部表示在内部表示自己 - Ip::Address将依赖Ip::EndpointIp::Address::Internalsockaddr_in

此方法将消除sockaddr_in6的两个in_addr / in_addr6结构。但它也会使Ip::Endpoint'内部表示'太大'。 Ip::Address只需要Ip::Address,但不需要in_addr

你有什么想法?

0 个答案:

没有答案