Phobos enhancement: add method to convert UnknownAddressReference to non-opaque Address subtype
Stefan via Digitalmars-d
digitalmars-d at puremagic.com
Tue Jun 28 01:46:15 PDT 2016
Many functions in std.socket, such as getAddress or parseAddress
return the UnknownAddressReference Address subtype instead of
InternetAddress or InternetAddress6.
While in many cases this is sufficient (e.g., when you just need
to do Socket.sendTo), in some cases it is not, especially when
accessing the specific addresses (like InternetAddress.addr) is
necessary.
Converting UnknownAddressReference into the proper non-opaque
type requires messy casting in user code, exposing non-portable
imports like core.sys.posix.netinet.in_:
Address address = getAddress("www.google.com",80);
if(address.addressFamily == AddressFamily.INET)
address = new
InternetAddress(*(cast(sockaddr_in*)address.name));
else
address = new
Internet6Address((cast(sockaddr_in6*)address.name).sin6_addr.s6_addr, (cast(sockaddr_in6*)address.name).sin6_port);
Can this be moved into a method of UnknownAddressReference?
Or, as a cleaner solution, have an abstract override method (like
"subtype") in Address, which returns the proper subtype for
UnknownAddressReference, and this for the other subtypes.
More information about the Digitalmars-d
mailing list