def accept(self): try: sock, addr = self.socket.accept() set_socket_inherit(sock, False), sock.setblocking(False) return sock, addr except socket.error: return None, None
def __init__( self, handler, bind_address=('localhost', 8080), opts=None, # A calibre logging object. If None, a default log that logs to # stdout is used log=None ): self.ready = False self.handler = handler self.opts = opts or Options() self.log = log or ThreadSafeLog(level=ThreadSafeLog.DEBUG) ba = tuple(bind_address) if not ba[0]: # AI_PASSIVE does not work with host of '' or None ba = ('0.0.0.0', ba[1]) self.bind_address = ba self.bound_address = None self.connection_map = {} self.ssl_context = None if self.opts.ssl_certfile is not None and self.opts.ssl_keyfile is not None: self.ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) self.ssl_context.load_cert_chain(certfile=self.opts.ssl_certfile, keyfile=self.opts.ssl_keyfile) self.pre_activated_socket = None if self.opts.allow_socket_preallocation: from calibre.srv.pre_activated import pre_activated_socket self.pre_activated_socket = pre_activated_socket() if self.pre_activated_socket is not None: set_socket_inherit(self.pre_activated_socket, False) self.bind_address = self.pre_activated_socket.getsockname()
def __init__(self, port, timeout=5): self.timeout = timeout self.socket = socket.create_connection(('localhost', port), timeout) set_socket_inherit(self.socket, False) self.key = standard_b64encode(os.urandom(8)) self.socket.sendall(HANDSHAKE_STR.format(self.key).encode('ascii')) self.read_buf = deque() self.read_upgrade_response() self.mask = memoryview(os.urandom(4)) self.frames = []
def __init__(self, port, timeout=5): self.timeout = timeout self.socket = socket.create_connection(('localhost', port), timeout) set_socket_inherit(self.socket, False) self.key = as_base64_bytes(os.urandom(8)) self.socket.sendall(HANDSHAKE_STR.format(self.key).encode('ascii')) self.read_buf = deque() self.read_upgrade_response() self.mask = memoryview(os.urandom(4)) self.frames = []
def __init__( self, handler, opts=None, plugins=(), # A calibre logging object. If None, a default log that logs to # stdout is used log=None, # A calibre logging object for access logging, by default no access # logging is performed access_log=None): self.ready = False self.handler = handler self.opts = opts or Options() if self.opts.trusted_ips: self.opts.trusted_ips = tuple( parse_trusted_ips(self.opts.trusted_ips)) self.log = log or ThreadSafeLog(level=ThreadSafeLog.DEBUG) self.jobs_manager = JobsManager(self.opts, self.log) self.access_log = access_log ba = (self.opts.listen_on, int(self.opts.port)) if not ba[0]: # AI_PASSIVE does not work with host of '' or None ba = ('0.0.0.0', ba[1]) self.bind_address = ba self.bound_address = None self.connection_map = {} self.ssl_context = None if self.opts.ssl_certfile is not None and self.opts.ssl_keyfile is not None: self.ssl_context = ssl.create_default_context( ssl.Purpose.CLIENT_AUTH) self.ssl_context.load_cert_chain(certfile=self.opts.ssl_certfile, keyfile=self.opts.ssl_keyfile) self.ssl_context.set_servername_callback(self.on_ssl_servername) self.pre_activated_socket = None if self.opts.allow_socket_preallocation: from calibre.srv.pre_activated import pre_activated_socket self.pre_activated_socket = pre_activated_socket() if self.pre_activated_socket is not None: set_socket_inherit(self.pre_activated_socket, False) self.bind_address = self.pre_activated_socket.getsockname() self.create_control_connection() self.pool = ThreadPool(self.log, self.job_completed, count=self.opts.worker_count) self.plugin_pool = PluginPool(self, plugins)
def __init__( self, handler, opts=None, plugins=(), # A calibre logging object. If None, a default log that logs to # stdout is used log=None, # A calibre logging object for access logging, by default no access # logging is performed access_log=None ): self.ready = False self.handler = handler self.opts = opts or Options() self.log = log or ThreadSafeLog(level=ThreadSafeLog.DEBUG) self.jobs_manager = JobsManager(self.opts, self.log) self.access_log = access_log ba = (self.opts.listen_on, int(self.opts.port)) if not ba[0]: # AI_PASSIVE does not work with host of '' or None ba = ('0.0.0.0', ba[1]) self.bind_address = ba self.bound_address = None self.connection_map = {} self.ssl_context = None if self.opts.ssl_certfile is not None and self.opts.ssl_keyfile is not None: self.ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) self.ssl_context.load_cert_chain(certfile=self.opts.ssl_certfile, keyfile=self.opts.ssl_keyfile) self.ssl_context.set_servername_callback(self.on_ssl_servername) self.pre_activated_socket = None if self.opts.allow_socket_preallocation: from calibre.srv.pre_activated import pre_activated_socket self.pre_activated_socket = pre_activated_socket() if self.pre_activated_socket is not None: set_socket_inherit(self.pre_activated_socket, False) self.bind_address = self.pre_activated_socket.getsockname() self.create_control_connection() self.pool = ThreadPool(self.log, self.job_completed, count=self.opts.worker_count) self.plugin_pool = PluginPool(self, plugins)
def create_sock_pair(port=0): '''Create socket pair. Works also on windows by using an ephemeral TCP port.''' if hasattr(socket, 'socketpair'): client_sock, srv_sock = socket.socketpair() set_socket_inherit(client_sock, False), set_socket_inherit(srv_sock, False) return client_sock, srv_sock # Create a non-blocking temporary server socket temp_srv_sock = socket.socket() set_socket_inherit(temp_srv_sock, False) temp_srv_sock.setblocking(False) temp_srv_sock.bind(('127.0.0.1', port)) port = temp_srv_sock.getsockname()[1] temp_srv_sock.listen(1) with closing(temp_srv_sock): # Create non-blocking client socket client_sock = socket.socket() client_sock.setblocking(False) set_socket_inherit(client_sock, False) try: client_sock.connect(('127.0.0.1', port)) except socket.error as err: # EWOULDBLOCK is not an error, as the socket is non-blocking if err.errno not in socket_errors_nonblocking: raise # Use select to wait for connect() to succeed. timeout = 1 readable = select.select([temp_srv_sock], [], [], timeout)[0] if temp_srv_sock not in readable: raise Exception( 'Client socket not connected in {} second(s)'.format(timeout)) srv_sock = temp_srv_sock.accept()[0] set_socket_inherit(srv_sock, False) client_sock.setblocking(True) return client_sock, srv_sock
def create_sock_pair(port=0): '''Create socket pair. Works also on windows by using an ephemeral TCP port.''' if hasattr(socket, 'socketpair'): client_sock, srv_sock = socket.socketpair() set_socket_inherit(client_sock, False), set_socket_inherit(srv_sock, False) return client_sock, srv_sock # Create a non-blocking temporary server socket temp_srv_sock = socket.socket() set_socket_inherit(temp_srv_sock, False) temp_srv_sock.setblocking(False) temp_srv_sock.bind(('127.0.0.1', port)) port = temp_srv_sock.getsockname()[1] temp_srv_sock.listen(1) with closing(temp_srv_sock): # Create non-blocking client socket client_sock = socket.socket() client_sock.setblocking(False) set_socket_inherit(client_sock, False) try: client_sock.connect(('127.0.0.1', port)) except socket.error as err: # EWOULDBLOCK is not an error, as the socket is non-blocking if err.errno not in socket_errors_nonblocking: raise # Use select to wait for connect() to succeed. timeout = 1 readable = select.select([temp_srv_sock], [], [], timeout)[0] if temp_srv_sock not in readable: raise Exception('Client socket not connected in {} second(s)'.format(timeout)) srv_sock = temp_srv_sock.accept()[0] set_socket_inherit(srv_sock, False) client_sock.setblocking(True) return client_sock, srv_sock
def bind(self, family, atype, proto=0): """Create (or recreate) the actual socket object.""" self.socket = socket.socket(family, atype, proto) set_socket_inherit(self.socket, False) self.setup_socket() self.socket.bind(self.bind_address)
def bind(self, family, atype, proto=0): '''Create (or recreate) the actual socket object.''' self.socket = socket.socket(family, atype, proto) set_socket_inherit(self.socket, False) self.setup_socket() self.socket.bind(self.bind_address)
def create_sock_pair(): '''Create socket pair. ''' client_sock, srv_sock = socket.socketpair() set_socket_inherit(client_sock, False), set_socket_inherit(srv_sock, False) return client_sock, srv_sock