def unpack_sockaddr(c_sockaddr): if c_sockaddr.sa_family == socket.AF_INET: c_sockaddr_in4 = ffi.cast('struct fatuv_sockaddr_in*', c_sockaddr) c_host = ffi.new('char[16]') port = socket.ntohs(c_sockaddr_in4.sin_port) lib.fatuv_ip4_name(c_sockaddr_in4, c_host, 16) return Address4(ffi.string(c_host), port) elif c_sockaddr.sa_family == socket.AF_INET6: #not support return None
def getpeername(self): assert self.handle if self.closing: raise error.HandleClosedError() ip = ffi.new('char[16]') port = ffi.new('int*') err = uv_tcp_v4_getpeername(self.handle, ip, port) if err < 0: raise TCPError((err, get_strerror(err))) return six.ensure_str(ffi.string(ip)), port[0]
def unpack_addrinfo(c_addrinfo): items, c_next = [], c_addrinfo while c_next: family = c_next.ai_family socktype = c_next.ai_socktype protocol = c_next.ai_protocol if c_next.ai_canonname: canonname = ffi.string(c_next.ai_canonname) else: canonname = None address = unpack_sockaddr(c_next.ai_addr) if c_next.ai_addr else None items.append(AddrInfo(family, socktype, protocol, canonname, address)) c_next = c_next.ai_next return items
def fatuv_fs_event_callback(fs_event_handle, c_filename, events, status): ptr = uv_get_pyobj(fs_event_handle) obj = ffi.from_handle(ptr) filename = ffi.string(c_filename).decode() obj._call_fs_event_callback(filename, events, status)
def get_strerror(err): ptr = uv_strerror(err) return ffi.string(ptr)
def get_err_name(err): ptr = uv_err_name(err) return ffi.string(ptr)