1593 while sock and sock.bytesAvailable(): |
1594 while sock and sock.bytesAvailable(): |
1594 header = sock.read(struct.calcsize(b"!II")) |
1595 header = sock.read(struct.calcsize(b"!II")) |
1595 length, datahash = struct.unpack(b"!II", header) |
1596 length, datahash = struct.unpack(b"!II", header) |
1596 |
1597 |
1597 data = bytearray() |
1598 data = bytearray() |
|
1599 now = time.monotonic() |
1598 while len(data) < length: |
1600 while len(data) < length: |
1599 maxSize = length - len(data) |
1601 maxSize = length - len(data) |
1600 if sock.bytesAvailable() < maxSize: |
1602 if sock.bytesAvailable() < maxSize: |
1601 sock.waitForReadyRead(50) |
1603 sock.waitForReadyRead(50) |
1602 data += sock.read(maxSize) |
1604 newData = sock.read(maxSize) |
|
1605 if newData: |
|
1606 data += newData |
|
1607 else: |
|
1608 if time.monotonic() - now > 2.0: # 2 seconds timeout |
|
1609 break |
1603 |
1610 |
1604 if zlib.adler32(data) & 0xFFFFFFFF != datahash: |
1611 if zlib.adler32(data) & 0xFFFFFFFF != datahash: |
1605 # corrupted data -> discard and continue |
1612 # corrupted data -> discard and continue |
1606 continue |
1613 continue |
1607 |
1614 |