Compare commits
	
		
			5 Commits
		
	
	
		
			h3-cleanup
			...
			bind_excep
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 69d493abce | ||
|   | e6c0f3990c | ||
|   | ab19d7b5dd | ||
|   | abdb5cb531 | ||
|   | b9b54a2eda | 
| @@ -49,7 +49,7 @@ from sanic.application.motd import MOTD | ||||
| from sanic.application.state import ApplicationServerInfo, Mode, ServerStage | ||||
| from sanic.base.meta import SanicMeta | ||||
| from sanic.compat import OS_IS_WINDOWS, StartMethod | ||||
| from sanic.exceptions import ServerKilled | ||||
| from sanic.exceptions import SanicException, ServerKilled | ||||
| from sanic.helpers import Default, _default, is_atty | ||||
| from sanic.http.constants import HTTP | ||||
| from sanic.http.tls import get_ssl_context, process_to_context | ||||
| @@ -880,12 +880,18 @@ class StartupMixin(metaclass=SanicMeta): | ||||
|             manager.run() | ||||
|         except ServerKilled: | ||||
|             exit_code = 1 | ||||
|         except SanicException as e: | ||||
|             exit_code = 1 | ||||
|             kwargs = primary_server_info.settings | ||||
|             if e.quiet: | ||||
|                 error_logger.error(str(e)) | ||||
|             else: | ||||
|                 raise | ||||
|         except BaseException: | ||||
|             kwargs = primary_server_info.settings | ||||
|             error_logger.exception( | ||||
|                 "Experienced exception while trying to serve" | ||||
|             ) | ||||
|             raise | ||||
|         finally: | ||||
|             logger.info("Server Stopped") | ||||
|             for app in apps: | ||||
|   | ||||
| @@ -47,10 +47,10 @@ def bind_unix_socket(path: str, *, mode=0o666, backlog=100) -> socket.socket: | ||||
|     path = os.path.abspath(path) | ||||
|     folder = os.path.dirname(path) | ||||
|     if not os.path.isdir(folder): | ||||
|         raise FileNotFoundError(f"Socket folder does not exist: {folder}") | ||||
|         raise FileNotFoundError("Socket folder does not exist") | ||||
|     try: | ||||
|         if not stat.S_ISSOCK(os.stat(path, follow_symlinks=False).st_mode): | ||||
|             raise FileExistsError(f"Existing file is not a socket: {path}") | ||||
|             raise FileExistsError("Existing file is not a socket") | ||||
|     except FileNotFoundError: | ||||
|         pass | ||||
|     # Create new socket with a random temporary name | ||||
| @@ -103,7 +103,10 @@ def configure_socket( | ||||
|     unix = server_settings["unix"] | ||||
|     backlog = server_settings["backlog"] | ||||
|     if unix: | ||||
|         sock = bind_unix_socket(unix, backlog=backlog) | ||||
|         try: | ||||
|             sock = bind_unix_socket(unix, backlog=backlog) | ||||
|         except OSError as e: | ||||
|             raise ServerError(f"Error binding {unix}: {e}", quiet=True) | ||||
|         server_settings["unix"] = unix | ||||
|     if sock is None: | ||||
|         try: | ||||
| @@ -112,6 +115,17 @@ def configure_socket( | ||||
|                 server_settings["port"], | ||||
|                 backlog=backlog, | ||||
|             ) | ||||
|         except PermissionError: | ||||
|             p = server_settings["port"] | ||||
|             if not p or p >= 1024: | ||||
|                 raise | ||||
|             addr = f"{server_settings['host']}:{p}" | ||||
|             error = ServerError( | ||||
|                 f"Permission denied binding to {addr}.\n\n" | ||||
|                 "Use `sudo sanic` to run on a privileged port.\n" | ||||
|             ) | ||||
|             error.quiet = True | ||||
|             raise error | ||||
|         except OSError as e:  # no cov | ||||
|             error = ServerError( | ||||
|                 f"Sanic server could not start: {e}.\n\n" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user