Skip to content
Snippets Groups Projects
Commit 27692810 authored by Jeffrey Zhang's avatar Jeffrey Zhang
Browse files

Keep calling recv until fully read

parent af2ed327
No related branches found
No related tags found
No related merge requests found
......@@ -7,6 +7,18 @@ from dataclasses import replace
from Messages import Message
from TransactionDeliverer import TransactionDeliverer
# Wraps multiple calls of recv until all read
# Returns (result, socket closed)
def socket_read(sock, message_len):
data = b""
while len(data) < len:
buffer = sock.recv(message_len - len(data))
if len(buffer) == 0:
# Socket closed
return data, True
data += buffer
return data, False
class Client:
def __init__(self, td: TransactionDeliverer, sock: socket.socket, ip: str, port: str):
self.socket = sock
......@@ -16,16 +28,15 @@ class Client:
self.td = td
def handle(self):
message_len = self.socket.recv(2)
if len(message_len) < 2:
message_len, socket_closed = socket_read(self.socket, 2)
if socket_closed:
#print(f"Less than two bytes - {self.client_name} - {len(message_len)}")
return False
message_len = int.from_bytes(message_len, 'big')
data = self.socket.recv(message_len)
if len(data) < message_len:
data, socket_closed = socket_read(self.socket, message_len)
if socket_closed:
#print("Less than msg len")
return False
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment