From 4a5bd79bb050d9e9e1394da2e4cd03605f595223 Mon Sep 17 00:00:00 2001 From: Joerg Steffens Date: Fri, 3 Nov 2017 11:58:08 -0400 Subject: fixes a sporadic problem with incomplete headers In some situations, a bareos message header have not been transfered completly. This patch will make sure, that a complete header have been received. --- bareos/bsock/lowlevel.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/bareos/bsock/lowlevel.py b/bareos/bsock/lowlevel.py index 61b9edb..457551f 100644 --- a/bareos/bsock/lowlevel.py +++ b/bareos/bsock/lowlevel.py @@ -212,7 +212,6 @@ class LowLevel(object): #return msg except socket.error as e: self._handleSocketError(e) - return msg def recv_submsg(self, length): @@ -266,8 +265,16 @@ class LowLevel(object): def __get_header(self): - self.__check_socket_connection() - header = self.socket.recv(4) + header = b'' + header_length = 4 + while header_length > 0: + self.logger.debug(" remaining header len: {}".format(header_length)) + self.__check_socket_connection() + # TODO + self.socket.settimeout(10) + submsg = self.socket.recv(header_length) + header_length -= len(submsg) + header += submsg if len(header) == 0: self.logger.debug("received empty header, assuming connection is closed") raise SocketEmptyHeader() -- cgit v1.2.3