Add comment about dual-use socket struct util.sockaddr

This commit is contained in:
Adam Holmberg
2015-06-01 09:23:10 -05:00
parent c843e6886f
commit dc433b91e6

View File

@@ -1024,15 +1024,23 @@ else:
"""
import ctypes
class sockaddr(ctypes.Structure):
"""
Shared struct for ipv4 and ipv6.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms740496(v=vs.85).aspx
``__pad1`` always covers the port.
When being used for ``sockaddr_in6``, ``ipv4_addr`` actually covers ``sin6_flowinfo``, resulting
in proper alignment for ``ipv6_addr``.
"""
_fields_ = [("sa_family", ctypes.c_short),
("__pad1", ctypes.c_ushort),
("ipv4_addr", ctypes.c_byte * 4),
("ipv6_addr", ctypes.c_byte * 16),
("__pad2", ctypes.c_ulong)]
if hasattr(ctypes, 'windll'):
WSAStringToAddressA = ctypes.windll.ws2_32.WSAStringToAddressA
WSAAddressToStringA = ctypes.windll.ws2_32.WSAAddressToStringA
@@ -1043,7 +1051,6 @@ else:
WSAStringToAddressA = not_windows
WSAAddressToStringA = not_windows
def inet_pton(address_family, ip_string):
if address_family == socket.AF_INET:
return socket.inet_aton(ip_string)
@@ -1066,7 +1073,6 @@ else:
raise socket.error('unknown address family')
def inet_ntop(address_family, packed_ip):
if address_family == socket.AF_INET:
return socket.inet_ntoa(packed_ip)