fix(python): do not set socket to nonblocking for wait_until_ready

There's two udp calls in `UdpTransport._ping()`:
- socket.sendall(b"PINGPING") -> this will be instanteous, AND it will
raise if the receiving side is not listening.
- socket.recv() -> this will wait for SOCKET_TIMEOUT seconds, but only
in case the sendall() succeeded. This means that receiving side exists
and we are now waiting until it's awake enough to respond.

In conclusion, we avoid hammering emulator with PINGPINGs with a timeout
so short we don't see an answer. This should avoid the problem
occasionally seen in CI and described in #1668
pull/1750/head
matejcik 3 years ago committed by matejcik
parent 34047cf3ec
commit 0e650b1a5b

@ -0,0 +1 @@
`UdpTransport.wait_until_ready` no longer sets socket to nonblocking

@ -91,7 +91,6 @@ class UdpTransport(ProtocolBasedTransport):
def wait_until_ready(self, timeout: float = 10) -> None:
try:
self.open()
self.socket.settimeout(0)
start = time.monotonic()
while True:
if self._ping():

Loading…
Cancel
Save