Compare commits

...

5 Commits

Author SHA1 Message Date
Juhani Krekelä 9f0dacca0d Handle timeouts while creating a connection 2023-10-26 22:10:30 +03:00
Juhani Krekelä c23f48c329 Handle connection being reset while reading 2023-06-16 11:31:49 +03:00
Juhani Krekelä 6aa6236031 Fix typo "Mo data" → "No data" 2023-03-21 00:13:26 +02:00
Juhani Krekelä 9f5f74c456 Flush log output after each line in case output is buffered 2021-12-12 17:07:00 +02:00
Juhani Krekelä 2c6d35347c Revert "Log to stderr if run non-interactively"
This reverts commit deae8043e1.
2021-12-12 17:05:31 +02:00
1 changed files with 21 additions and 10 deletions

View File

@ -41,31 +41,37 @@ class LoggerThread(threading.Thread):
elif message_type == logmessage_types.internal:
if message_data[0] == internal_submessage_types.quit:
assert len(message_data) == 1
print('--- Quit', file=sys.stderr)
print('--- Quit')
sys.stdout.flush()
self.dead_notify_channel.send((controlmessage_types.quit,))
break
elif message_data[0] == internal_submessage_types.error:
assert len(message_data) == 2
print('--- Error', message_data[1], file=sys.stderr)
print('--- Error', message_data[1])
sys.stdout.flush()
elif message_data[0] == internal_submessage_types.server:
assert len(message_data) == 2
assert len(message_data[1]) == 2
print(f'--- Connecting to server {message_data[1][0]}:{message_data[1][1]}', file=sys.stderr)
print(f'--- Connecting to server {message_data[1][0]}:{message_data[1][1]}')
sys.stdout.flush()
else:
print('--- ???', message_data, file=sys.stderr)
print('--- ???', message_data)
sys.stdout.flush()
# Messages about status from the bot code
elif message_type == logmessage_types.status:
assert len(message_data) == 2
print('*', end='', file=sys.stderr)
print(*message_data[0], **message_data[1], file=sys.stderr)
print('*', end='')
print(*message_data[0], **message_data[1])
sys.stdout.flush()
else:
print('???', message_type, message_data, file=sys.stderr)
print('???', message_type, message_data)
sys.stdout.flush()
# API(serverthread_object)
# Create a new API object corresponding to given ServerThread object
@ -232,9 +238,14 @@ class ServerThread(threading.Thread):
if fd == self.server_socket.fileno():
# Ready to receive, read into buffer and handle full messages
if event | select.POLLIN:
data = self.server_socket.recv(1024)
try:
data = self.server_socket.recv(1024)
except ConnectionResetError:
self.logging_channel.send((logmessage_types.internal, internal_submessage_types.error, 'Connection reset while reading'))
reconnecting = True
break
# Mo data to be read even as POLLIN triggered → connection has broken
# No data to be read even as POLLIN triggered → connection has broken
# Log it and try reconnecting
if data == b'':
self.logging_channel.send((logmessage_types.internal, internal_submessage_types.error, 'Empty read'))
@ -303,7 +314,7 @@ class ServerThread(threading.Thread):
self.logging_channel.send((logmessage_types.internal, internal_submessage_types.server, address))
try:
self.server_socket = socket.create_connection(address)
except (ConnectionRefusedError, socket.gaierror):
except (ConnectionRefusedError, socket.gaierror, TimeoutError):
# Tell controller we failed
self.logging_channel.send((logmessage_types.internal, internal_submessage_types.error, "Can't connect to %s:%s" % address))