diff options
author | Joerg Steffens <joerg.steffens@bareos.com> | 2017-11-03 18:58:08 +0300 |
---|---|---|
committer | Joerg Steffens <joerg.steffens@bareos.com> | 2017-11-03 19:02:18 +0300 |
commit | 4a5bd79bb050d9e9e1394da2e4cd03605f595223 (patch) | |
tree | 1004cdca68634543c665c1c3327e3fa17486ff06 | |
parent | 3d8bd017582f3d29035aea1d62bf699399465c2e (diff) |
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.
-rw-r--r-- | bareos/bsock/lowlevel.py | 13 |
1 files 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() |