Esempio n. 1
0
def register():
    '''
    This function creates a select.poll object that can be used in the same
    manner as signal.pause(). The poll object returns each time a signal was
    received by the process.

    This function has to be called from the main thread.
    '''

    global _signal_poller
    global _signal_read_fd

    if _signal_poller is not None:
        raise RuntimeError('register was already called')

    read_fd, write_fd = os.pipe()

    # Python c-level signal handler requires that the write end will be in
    # non blocking mode
    filecontrol.set_non_blocking(write_fd)

    # Set the read pipe end to non-blocking too, just in case.
    filecontrol.set_non_blocking(read_fd)

    # Prevent subproccesses we execute from inheriting the pipes.
    filecontrol.set_close_on_exec(write_fd)
    filecontrol.set_close_on_exec(read_fd)

    signal.set_wakeup_fd(write_fd)

    poller = select.poll()
    poller.register(read_fd, select.POLLIN)

    _signal_poller = poller
    _signal_read_fd = read_fd
Esempio n. 2
0
 def __init__(self, map):
     rfd, wfd = os.pipe()
     asyncore.file_dispatcher.__init__(self, rfd, map=map)
     os.close(rfd)  # file_dispatcher duped it
     filecontrol.set_close_on_exec(self._fileno)
     filecontrol.set_close_on_exec(wfd)
     filecontrol.set_non_blocking(wfd)
     self._wfd = wfd
Esempio n. 3
0
 def __init__(self, map):
     rfd, wfd = os.pipe()
     asyncore.file_dispatcher.__init__(self, rfd, map=map)
     os.close(rfd)  # file_dispatcher duped it
     filecontrol.set_close_on_exec(self._fileno)
     filecontrol.set_close_on_exec(wfd)
     filecontrol.set_non_blocking(wfd)
     self._wfd = wfd
Esempio n. 4
0
def _create_socket(host, port):
    addrinfo = socket.getaddrinfo(host, port,
                                  socket.AF_UNSPEC, socket.SOCK_STREAM)

    family, socktype, proto, _, sockaddr = addrinfo[0]
    server_socket = socket.socket(family, socktype, proto)
    filecontrol.set_close_on_exec(server_socket.fileno())
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind(sockaddr)

    return server_socket
Esempio n. 5
0
def _create_socket(host, port):
    addr = socket.getaddrinfo(host, port, socket.AF_INET, socket.SOCK_STREAM)
    if not addr:
        raise socket.error("Could not translate address '%s:%s'" % (host, str(port)))

    server_socket = socket.socket(addr[0][0], addr[0][1], addr[0][2])
    filecontrol.set_close_on_exec(server_socket.fileno())
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind(addr[0][4])

    return server_socket
Esempio n. 6
0
def _create_socket(host, port):
    addrinfo = socket.getaddrinfo(host, port, socket.AF_UNSPEC,
                                  socket.SOCK_STREAM)

    family, socktype, proto, _, sockaddr = addrinfo[0]
    server_socket = socket.socket(family, socktype, proto)
    filecontrol.set_close_on_exec(server_socket.fileno())
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind(sockaddr)

    return server_socket
Esempio n. 7
0
def _create_socket(host, port):
    addr = socket.getaddrinfo(host, port, socket.AF_INET, socket.SOCK_STREAM)
    if not addr:
        raise socket.error("Could not translate address '%s:%s'" %
                           (host, str(port)))

    server_socket = socket.socket(addr[0][0], addr[0][1], addr[0][2])
    filecontrol.set_close_on_exec(server_socket.fileno())
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind(addr[0][4])

    return server_socket
Esempio n. 8
0
    def _create_socket(self, host, port):
        addr = socket.getaddrinfo(host, port, socket.AF_INET,
                                  socket.SOCK_STREAM)
        if not addr:
            raise Exception("Could not translate address '%s:%s'" %
                            (self._host, str(self._port)))
        server_socket = socket.socket(addr[0][0], addr[0][1], addr[0][2])
        filecontrol.set_close_on_exec(server_socket.fileno())
        server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        server_socket.bind(addr[0][4])
        server_socket.listen(5)

        server_socket.setblocking(0)
        return server_socket
Esempio n. 9
0
    def __init__(self, host, port, sslctx=None):
        self._sslctx = sslctx
        self._host = host
        self._port = port

        self._read_fd, self._write_fd = os.pipe()
        filecontrol.set_non_blocking(self._read_fd)
        filecontrol.set_close_on_exec(self._read_fd)
        filecontrol.set_non_blocking(self._write_fd)
        filecontrol.set_close_on_exec(self._write_fd)

        self._socket = self._create_socket(host, port)
        self._poller = select.poll()
        self._poller.register(self._socket, select.POLLIN)
        self._poller.register(self._read_fd, select.POLLIN)
        self._pending_connections = {}
        self._handlers = []
        # Initialize *before* starting to serve, to make it easier to test the
        # cleanup logic.
        self._next_cleanup = time.time() + self.CLEANUP_INTERVAL
        self._required_size = None
Esempio n. 10
0
 def __init__(self, fd, complete, bufsize=4096, map=None):
     asyncore.file_dispatcher.__init__(self, fd, map=map)
     filecontrol.set_close_on_exec(self._fileno)
     self._complete = complete
     self._bufsize = bufsize
     self._data = bytearray()
Esempio n. 11
0
def _create_socket():
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    filecontrol.set_close_on_exec(sock.fileno())
    sock.setblocking(0)
    return sock
Esempio n. 12
0
 def test_no_close_on_exec(self):
     with open_fd() as fd:
         self.assertEqual(0, filecontrol.set_close_on_exec(fd, False))
         self.assertFalse(fcntl.FD_CLOEXEC & fcntl.fcntl(fd, fcntl.F_GETFD))
Esempio n. 13
0
 def __init__(self, fd, complete, bufsize=4096, map=None):
     asyncore.file_dispatcher.__init__(self, fd, map=map)
     filecontrol.set_close_on_exec(self._fileno)
     self._complete = complete
     self._bufsize = bufsize
     self._data = bytearray()
Esempio n. 14
0
def _create_socket():
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    filecontrol.set_close_on_exec(sock.fileno())
    sock.setblocking(0)
    return sock