def __init__(self, ares_addrttl): buf = _ffi.new("char[]", _lib.INET6_ADDRSTRLEN) if _ffi.typeof(ares_addrttl) is _ffi.typeof("struct ares_addrttl"): _lib.ares_inet_ntop(socket.AF_INET, _ffi.addressof(ares_addrttl.ipaddr), buf, _lib.INET6_ADDRSTRLEN) elif _ffi.typeof(ares_addrttl) is _ffi.typeof("struct ares_addr6ttl"): _lib.ares_inet_ntop(socket.AF_INET6, _ffi.addressof(ares_addrttl.ip6addr), buf, _lib.INET6_ADDRSTRLEN) else: raise TypeError() self.host = _ffi_string(buf, _lib.INET6_ADDRSTRLEN) self.ttl = ares_addrttl.ttl
def __init__(self, hostent): self.name = _ffi_string(hostent.h_name) self.aliases = [] self.addresses = [] for i in range(100): if hostent.h_aliases[i] == _ffi.NULL: break self.aliases.append(_ffi_string(hostent.h_aliases[i])) for i in range(100): if hostent.h_addr_list[i] == _ffi.NULL: break buf = _ffi.new("char[]", _lib.INET6_ADDRSTRLEN) if _ffi.NULL != _lib.ares_inet_ntop(hostent.h_addrtype, hostent.h_addr_list[i], buf, _lib.INET6_ADDRSTRLEN): self.addresses.append(_ffi_string(buf, _lib.INET6_ADDRSTRLEN))
def _get_servers(self): servers = _ffi.new("struct ares_addr_node **") r = _lib.ares_get_servers(self.channel, servers) if r != ARES_SUCCESS: raise AresError(errno.strerror(r)) server_list = [] server = _ffi.new("struct ares_addr_node **", servers[0]) while True: if server == _ffi.NULL: break ip = _ffi.new("char []", _lib.INET6_ADDRSTRLEN) if _ffi.NULL != _lib.ares_inet_ntop(server.family, _ffi.addressof(server.addr), ip, _lib.INET6_ADDRSTRLEN): server_list.append(_ffi_string(ip, _lib.INET6_ADDRSTRLEN)) server = server.next return server_list