Skip to content
Snippets Groups Projects
Verified Commit c05fefa7 authored by Ole Binder's avatar Ole Binder
Browse files

Fix: move exception handling from read to send. #153

parent 4273bb7c
Branches
Tags
1 merge request!51Fix broken pipe #153
Pipeline #8740 passed
......@@ -258,6 +258,10 @@ class CoreConnection:
def open(self):
"""
Connect to Liquidsoap socket.
Raises:
CoreConnectionError: Raised when there is a connection or communication
Error.
"""
try:
self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
......@@ -308,9 +312,14 @@ class CoreConnection:
try:
self.socket.sendall(command.encode())
result = self.read()
except BrokenPipeError:
except BrokenPipeError as broken_pipe:
msg = "Broken Pipe while sending command"
self.logger.info(SU.pink(msg))
self.logger.error(SU.red(msg), broken_pipe)
self.connected = False
raise CoreConnectionError(msg)
except TimeoutError as timeout_error:
msg = "Socket timeout while reading"
self.logger.error(SU.red(msg), timeout_error)
self.connected = False
raise CoreConnectionError(msg)
except Exception as e:
......@@ -336,19 +345,12 @@ class CoreConnection:
"""
data = ""
try:
self.socket.settimeout(timeout)
while True:
data += self.socket.recv(1).decode(CoreConnection.ENCODING)
if data.find("END\r\n") != -1 or data.find("Bye!\r\n") != -1:
data.replace("END\r\n", "")
break
except TimeoutError as timeout_error:
msg = f"Socket timeout after {timeout} seconds while reading"
self.logger.warning(SU.yellow(msg), timeout_error)
except Exception as e:
msg = "Unknown error while socket.read_all()"
self.logger.error(SU.red(msg), e)
self.socket.settimeout(timeout)
while True:
data += self.socket.recv(1).decode(CoreConnection.ENCODING)
if data.find("END\r\n") != -1 or data.find("Bye!\r\n") != -1:
data.replace("END\r\n", "")
break
return data
@private
......@@ -360,25 +362,18 @@ class CoreConnection:
str: message read from socket
@private
"""
if self.connected:
ret = self.read_all().splitlines()
try:
last = ret.pop()
if last != "Bye!":
if len(ret) > 1:
self.message = str.join(" - ", ret)
elif len(ret) == 1:
self.message = ret[0]
else:
self.message = last
except Exception as e:
msg = "Unknown error while socket.read()"
self.logger.error(SU.red(msg), e)
return self.message
# FIXME: return str if no tests depend on this None.
return None
ret = self.read_all().splitlines()
last = ret.pop()
if last != "Bye!":
if len(ret) > 1:
self.message = str.join(" - ", ret)
elif len(ret) == 1:
self.message = ret[0]
else:
self.message = last
return self.message
class CoreConnectionError(Exception):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment