def get_lisener(port, host=''): lisener = None while lisener is None: family, address = parse_address((host, port)) try: lisener = WSGIServer.get_listener(address, family=family) except Exception, e: pass port += 1
def get_lisener(port, host=''): if not host: host = get_ip_address() lisener = None while lisener is None: family, address = parse_address((host, port)) try: lisener = WSGIServer.get_listener(address, family=family) except Exception: pass port += 1 return lisener
def _make_gevent_socket(self): if os.name != 'nt': unix_socket_file = os.environ.get("CALIBRE_UNIX_SOCKET") if unix_socket_file: return self._make_gevent_unix_socket(unix_socket_file), "unix:" + unix_socket_file if self.listen_address: return (self.listen_address, self.listen_port), None if os.name == 'nt': self.listen_address = '0.0.0.0' return (self.listen_address, self.listen_port), None try: address = ('::', self.listen_port) sock = WSGIServer.get_listener(address, family=socket.AF_INET6) except socket.error as ex: log.error('%s', ex) log.warning('Unable to listen on "", trying on IPv4 only...') address = ('', self.listen_port) sock = WSGIServer.get_listener(address, family=socket.AF_INET) return sock, _readable_listen_address(*address)
def _make_gevent_unix_socket(self, socket_file): # the socket file must not exist prior to bind() if os.path.exists(socket_file): # avoid nuking regular files and symbolic links (could be a mistype or security issue) if os.path.isfile(socket_file) or os.path.islink(socket_file): raise OSError(errno.EEXIST, os.strerror(errno.EEXIST), socket_file) os.remove(socket_file) unix_sock = WSGIServer.get_listener(socket_file, family=socket.AF_UNIX) self.unix_socket_file = socket_file # ensure current user and group have r/w permissions, no permissions for other users # this way the socket can be shared in a semi-secure manner # between the user running calibre-web and the user running the fronting webserver os.chmod(socket_file, 0o660) return unix_sock