Есть код на php:
if ( ! feof($this->_socket))
{
$packet->clean();
$this->read($packet);
}
Я его переписываю на Python, немного изменяя под свои нужды
while True:
self.packet.clean()
self.packet.read()
...
Где в self.packet.read - последовательное чтение из сокета и распаковка нужных данных что-то вроде
...
self.code = int(struct.unpack('B', self.sock.recv(1))[0])
version = int(struct.unpack('B', self.sock.recv(1))[0])
...
после чтения которых, должна вычитываться очередная порция, если таковую сервер высылает, и продолжать выполнение, если данных от сервера более нет.
И тут сталкиваюсь с проблемой. Код на php вычитывает нужную порцию данных, успешно их обрабатывает до конца, и успешно продолжает выполнение программы. Код на python же, вычитывает до конца, обрабатывает их, но ожидаемо, - останавливается в этом месте, продолжая ожидать данные, которые сервер уже не отправит. Вылет и обработка исключения по таймауту ломает логику программы.
Каким образом корректно отработать эту ситуацию под Python 3.x? Кто сталкивался?