I have started work on converting ATS to use sockaddr_storage internally as 
much as possible. Looking at some early progress, I think I will be taking the 
approach of storing, passing, and returning sockaddr_storage basically 
everywhere. I will provide a number of inline functions to make protocol 
specific access easy, e.g. if you really want the IPv4 address, you would do

  uint32_t addr = ip4_cast(thing->get_ip_addr()).sin_addr.s_addr;

IPv4 and IPv6 specific methods would be removed (e.g. 
NetVConnection::get_remote_ip - use ip4_cast(netv->get_remote_addr()) instead). 
I think we might want to put debug asserts in these functions which go off if 
the ss_family value isn't appropriate.

I think I will also provide equality and inequality operators for 
sockaddr_storage which will, in a number of cases, remove the need for protocol 
casting entirely while improving IPv6 compatibility. The cases not covered are 
where an address should be compared to a list (e.g., is this address a local 
machine address?). I am still thinking about what to do there.

Reply via email to