def server_socket(port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # set close-on-exec flag (subprocesses should not inherit it) set_close_on_exec(s, True) s.bind(('', port)) s.listen(1) return ServerSocketWrapper(s)
def start_popen(self, cmd_args, env): # For efficiency, we let the popen object read directly from the socket. # Thus the ev_loop should not longer detect input data on this socket, # it should only detect errors, that is why we call update_listener() below. set_close_on_exec(self.client_sock_file, False) self.popen = Popen(cmd_args, env=env, bufsize=1024 * 1024, stdin=self.client_sock_file, stdout=self.client_sock_file, stderr=STDOUT) set_close_on_exec(self.client_sock_file, True) self.ev_loop.update_listener(self, 0) self.popen_set_finalize_callback()
def accept(self): s_conn, address = self.s.accept() # set close-on-exec flag (subprocesses should not inherit it) set_close_on_exec(s_conn, True) return s_conn, address
def client_sock_file(host, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # set close-on-exec flag (subprocesses should not inherit it) set_close_on_exec(s, True) s.connect((host, port)) return SmartSocketFile(s)