Socket timeouts, always HTTP reconnect on errors
This commit is contained in:
parent
08368bbf36
commit
188dc6be98
|
@ -105,7 +105,7 @@ class Client(QObject):
|
||||||
def startSyncing(self) -> None:
|
def startSyncing(self) -> None:
|
||||||
while True:
|
while True:
|
||||||
self._on_sync(self.net_sync.talk(
|
self._on_sync(self.net_sync.talk(
|
||||||
self.nio_sync.sync, timeout=10_000
|
self.nio_sync.sync, timeout=8000
|
||||||
))
|
))
|
||||||
|
|
||||||
if self._stop_sync.is_set():
|
if self._stop_sync.is_set():
|
||||||
|
|
|
@ -11,7 +11,7 @@ from uuid import UUID
|
||||||
|
|
||||||
import nio
|
import nio
|
||||||
import nio.responses as nr
|
import nio.responses as nr
|
||||||
from nio.exceptions import RemoteTransportError
|
from nio.exceptions import ProtocolError, RemoteTransportError
|
||||||
|
|
||||||
OptSock = Optional[ssl.SSLSocket]
|
OptSock = Optional[ssl.SSLSocket]
|
||||||
NioRequestFunc = Callable[..., Tuple[UUID, bytes]]
|
NioRequestFunc = Callable[..., Tuple[UUID, bytes]]
|
||||||
|
@ -33,7 +33,6 @@ class RetrySleeper:
|
||||||
self.current_time = max(
|
self.current_time = max(
|
||||||
0, min((max_time / 10) * (2 ^ (self.tries - 1)), max_time)
|
0, min((max_time / 10) * (2 ^ (self.tries - 1)), max_time)
|
||||||
)
|
)
|
||||||
print("sleeping", self.current_time)
|
|
||||||
time.sleep(self.current_time)
|
time.sleep(self.current_time)
|
||||||
self.tries += 1
|
self.tries += 1
|
||||||
|
|
||||||
|
@ -55,7 +54,7 @@ class NetworkManager:
|
||||||
|
|
||||||
def _get_socket(self) -> ssl.SSLSocket:
|
def _get_socket(self) -> ssl.SSLSocket:
|
||||||
sock = self._ssl_context.wrap_socket( # type: ignore
|
sock = self._ssl_context.wrap_socket( # type: ignore
|
||||||
socket.create_connection((self.host, self.port)),
|
socket.create_connection((self.host, self.port), timeout=16),
|
||||||
server_hostname = self.host,
|
server_hostname = self.host,
|
||||||
session = self._ssl_session,
|
session = self._ssl_session,
|
||||||
)
|
)
|
||||||
|
@ -76,10 +75,9 @@ class NetworkManager:
|
||||||
|
|
||||||
|
|
||||||
def http_disconnect(self) -> None:
|
def http_disconnect(self) -> None:
|
||||||
data = self.nio.disconnect()
|
|
||||||
try:
|
try:
|
||||||
self.write(data)
|
self.write(self.nio.disconnect())
|
||||||
except (OSError, RemoteTransportError):
|
except (OSError, ProtocolError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,7 +121,6 @@ class NetworkManager:
|
||||||
sock = None
|
sock = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
print("Try for", nio_func.__name__)
|
|
||||||
sock = self._get_socket()
|
sock = self._get_socket()
|
||||||
|
|
||||||
if not self.nio.connection:
|
if not self.nio.connection:
|
||||||
|
@ -134,15 +131,9 @@ class NetworkManager:
|
||||||
self.write(to_send, sock)
|
self.write(to_send, sock)
|
||||||
response = self.read(sock)
|
response = self.read(sock)
|
||||||
|
|
||||||
except OSError as err:
|
except (OSError, RemoteTransportError) as err:
|
||||||
logging.error("Socket error for %s: %s",
|
logging.error("Connection error for %s: %s",
|
||||||
nio_func.__name__, err.strerror)
|
nio_func.__name__, str(err))
|
||||||
self._close_socket(sock)
|
|
||||||
retry.sleep(max_time=2)
|
|
||||||
|
|
||||||
except RemoteTransportError as err:
|
|
||||||
logging.error("HTTP transport error for %s: %s",
|
|
||||||
nio_func.__name__, err)
|
|
||||||
self._close_socket(sock)
|
self._close_socket(sock)
|
||||||
self.http_disconnect()
|
self.http_disconnect()
|
||||||
retry.sleep(max_time=2)
|
retry.sleep(max_time=2)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user