Use poll instead of timeouts when waiting for response
This commit is contained in:
parent
5f0a735a1d
commit
0ac0006a63
|
@ -289,14 +289,18 @@ def proxy(sock, host):
|
||||||
# Keep sending request body, if any, until we get a response from remote
|
# Keep sending request body, if any, until we get a response from remote
|
||||||
poll = select.poll()
|
poll = select.poll()
|
||||||
poll.register(remote_sock, select.POLLIN)
|
poll.register(remote_sock, select.POLLIN)
|
||||||
sock.settimeout(1)
|
poll.register(sock, select.POLLIN)
|
||||||
while len(poll.poll(1000)) == 0:
|
no_response = True
|
||||||
|
while no_response:
|
||||||
|
for fd, _ in poll.poll():
|
||||||
|
if fd == remote_sock.fileno():
|
||||||
|
no_response = False
|
||||||
|
break
|
||||||
|
else:
|
||||||
try:
|
try:
|
||||||
data = sock.recv(1024)
|
data = sock.recv(1024)
|
||||||
except ConnectionResetError:
|
except ConnectionResetError:
|
||||||
break
|
break
|
||||||
except socket.timeout:
|
|
||||||
continue
|
|
||||||
if data == b'': break
|
if data == b'': break
|
||||||
# Save the part we've sent already in case we need to re-send request
|
# Save the part we've sent already in case we need to re-send request
|
||||||
request_data.extend(data)
|
request_data.extend(data)
|
||||||
|
@ -305,7 +309,6 @@ def proxy(sock, host):
|
||||||
except (ConnectionResetError, BrokenPipeError):
|
except (ConnectionResetError, BrokenPipeError):
|
||||||
print('Remote hung up', file=sys.stderr)
|
print('Remote hung up', file=sys.stderr)
|
||||||
return
|
return
|
||||||
sock.settimeout(None)
|
|
||||||
|
|
||||||
# Get response headers
|
# Get response headers
|
||||||
remote_sock.settimeout(10)
|
remote_sock.settimeout(10)
|
||||||
|
@ -382,7 +385,6 @@ def proxy(sock, host):
|
||||||
print('', file=sys.stderr)
|
print('', file=sys.stderr)
|
||||||
sock.settimeout(60)
|
sock.settimeout(60)
|
||||||
remote_sock.settimeout(60)
|
remote_sock.settimeout(60)
|
||||||
poll.register(sock, select.POLLIN)
|
|
||||||
last_transfer = time.monotonic()
|
last_transfer = time.monotonic()
|
||||||
while True:
|
while True:
|
||||||
events = poll.poll(60_000)
|
events = poll.poll(60_000)
|
||||||
|
|
Loading…
Reference in New Issue