Как очистить буфер сокета, чтобы получить последние данные из последнего запроса

Мне нужно очистить буфер сокетов, чтобы в нем не было всего «журнала» сокетов. Я должен работать только с последним ответом на мой последний запрос.

Я использую функцию для получения всех данных. Я понимаю, что должен как-то очистить свой буфер сокетов внутри этой функции, но не могу найти способ сделать это.

def recv_timeout(the_socket, timeout=2): # делаем сокет не блокируемым the_socket.setblocking(0) total_data = [] data = '' begin = time.time() while 1: if total_data and time.time() - begin > timeout: break elif time.time() - begin > timeout * 2: break try: data = the_socket.recv(8192) if data: total_data.append(data) begin = time.time() else: time.sleep(0.1) except: pass return b''.join(total_data) 

Когда я отправляю запрос, как:

 client_socket.sendall('list
'.encode("utf-8")) 

Я получаю нормальный ответ на мой запрос. Но когда я делаю

 client_socket.sendall('recv 1
'.encode("utf-8")) 

сразу после предыдущего запроса я получаю ответ 1 + ответ 2, но мне нужен только ответ 2.

Большое спасибо!

Всего 1 ответ


TCP-сокет - это поток. Все, что вы можете сделать, это прочитать все, что уже было получено. Это означает, что если ваша программа похожа

send req1
receive and process answer1
send req2
receive and process answer2

все должно быть хорошо.

Но вы делаете:

send req1
send req2

тогда вам придется сделать

receive answer1
receive and process answer2

Есть идеи?

10000