Недавно я писал http / https прокси с использованием сокета на python, и я использую select, чтобы решить, готов ли сокет для получения или отправки, что-то вроде этого:
inputs = [sock1, sock2...]
outputs = [sock1, sock2...]
while True:
readable, writable, exceptional = select.select(inputs, outputs, inputs)
for s in readable:
do something with s.recv()
for s in writable:
do something with s.send()
и я замечаю, что иногда сокет читается, но когда я выполняю s.recv (), он возвращается пустым. И так как у меня есть некоторое время True l oop снаружи, так что он ничего не получает снова и снова. Сначала я попытался закрыть сокет:
data = s.recv(4096)
if not data:
inputs.remove(s)
s.close()
, но через некоторое время какой-то сокет оживает, и они не могут отправить мне сообщение, потому что я уже закрыл его. Значит ли это, что я не должен закрывать это? Так что мне с этим делать?