def sock_from_fd(fd): if is_socket(fd): if is_socket_unix(fd): return socket.socket(family=socket.AF_UNIX, type=socket.SOCK_STREAM, fileno=fd) for fam in [socket.AF_INET6, socket.AF_INET]: for t in [socket.SOCK_STREAM]: if is_socket(fd, family=fam, type=t): return socket.socket(family=fam, type=t, fileno=fd) return socket.socket(fileno=fd) return None
def test_is_socket(): with closing_socketpair(socket.AF_UNIX) as pair: for sock in pair: for arg in (sock, sock.fileno()): assert is_socket(arg) assert is_socket(arg, socket.AF_UNIX) assert not is_socket(arg, socket.AF_INET) assert is_socket(arg, socket.AF_UNIX, socket.SOCK_STREAM) assert not is_socket(arg, socket.AF_INET, socket.SOCK_DGRAM) assert is_socket(sock) assert is_socket(arg, socket.AF_UNIX) assert not is_socket(arg, socket.AF_INET) assert is_socket(arg, socket.AF_UNIX, socket.SOCK_STREAM) assert not is_socket(arg, socket.AF_INET, socket.SOCK_DGRAM)
def test_is_socket(): with closing_socketpair(socket.AF_UNIX) as pair: for sock in pair: for arg in (sock, sock.fileno()): assert is_socket(arg) assert is_socket(arg, socket.AF_UNIX) assert not is_socket(arg, socket.AF_INET) assert is_socket(arg, socket.AF_UNIX, socket.SOCK_STREAM) assert not is_socket(arg, socket.AF_INET, socket.SOCK_DGRAM) with skip_enosys(): assert not is_socket_sockaddr(arg, '8.8.8.8:2000', socket.SOCK_DGRAM, 0, 0) assert _is_socket(arg) assert _is_socket(arg, socket.AF_UNIX) assert not _is_socket(arg, socket.AF_INET) assert _is_socket(arg, socket.AF_UNIX, socket.SOCK_STREAM) assert not _is_socket(arg, socket.AF_INET, socket.SOCK_DGRAM) with skip_enosys(): assert not _is_socket_sockaddr(arg, '8.8.8.8:2000', socket.SOCK_DGRAM, 0, 0)
def map_fds(): """Return the list of inherited sockets. Return null if there arenone. """ fds = {} for frozen_fd in frozenset(daemon.listen_fds()): journal.send("processing fd: {0}".format(frozen_fd)) if daemon.is_socket(frozen_fd): sock_obj = socket.socket(fileno=frozen_fd) journal.send("created socket: name={0}".format( sock_obj.getsockname())) fds[frozen_fd] = sock_obj return fds