import socket
from http.client import HTTPConnection
+import sys
from typing import Any, Optional, Union
-from urllib.error import HTTPError
+from urllib.error import HTTPError, URLError
from urllib.request import AbstractHTTPHandler, Request, build_opener, install_opener, urlopen
from typing_extensions import Literal
return Response(response.status, response.read().decode("utf8"))
except HTTPError as err:
return Response(err.code, err.read().decode("utf8"))
+ except URLError as err:
+ if err.errno == 111 or isinstance(err.reason, ConnectionRefusedError):
+ print("Connection refused.")
+ print(f"\tURL: {url}")
+ print("Is the URL correct?")
+ print("\tUnix socket would start with http+unix:// and URL encoded path.")
+ print("\tInet sockets would start with http:// and domain or ip")
+ else:
+ print(f"{err}: url={url}", file=sys.stderr)
+ sys.exit(1)
# Code heavily inspired by requests-unixsocket
[Service]
Type=notify
TimeoutStartSec=10s
-ExecStart=/usr/bin/env python3 -m knot_resolver_manager --config=/etc/knot-resolver/config.yml
+ExecStart=/usr/bin/env knot-resolver --config=/etc/knot-resolver/config.yml
KillSignal=SIGINT
WorkingDirectory=/var/run/knot-resolver/
User=@user@
Group=@group@
CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SETPCAP
AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_SETPCAP
-# See systemd.service(5) for explanation, why we should replace this with a blocking request
-# ExecReload=/usr/bin/env kill -HUP $MAINPID
+ExecReload=/usr/bin/env kresctl --socket /var/run/knot-resolver/manager.sock reload
[Install]
WantedBy=multi-user.target
\ No newline at end of file