Skip to content

Commit 1d8f5cf

Browse files
committed
Make timeout in connect() consistent.
Closes: #117.
1 parent b89fb45 commit 1d8f5cf

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

asyncpg/connection.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -848,8 +848,12 @@ async def connect(dsn=None, *,
848848
last_error = None
849849
addr = None
850850
for addr in addrs:
851+
if timeout <= 0:
852+
raise asyncio.TimeoutError
853+
851854
connected = _create_future(loop)
852-
proto_factory = lambda: protocol.Protocol(addr, connected, opts, loop)
855+
proto_factory = lambda: protocol.Protocol(
856+
addr, connected, opts, loop)
853857

854858
if isinstance(addr, str):
855859
# UNIX socket
@@ -861,19 +865,24 @@ async def connect(dsn=None, *,
861865
else:
862866
connector = loop.create_connection(proto_factory, *addr)
863867

868+
before = time.monotonic()
864869
try:
865870
tr, pr = await asyncio.wait_for(
866871
connector, timeout=timeout, loop=loop)
867872
except (OSError, asyncio.TimeoutError, ConnectionError) as ex:
868873
last_error = ex
869874
else:
870875
break
876+
finally:
877+
timeout -= time.monotonic() - before
871878
else:
872879
raise last_error
873880

874881
try:
875-
await connected
876-
except:
882+
if timeout <= 0:
883+
raise asyncio.TimeoutError
884+
await asyncio.wait_for(connected, loop=loop, timeout=timeout)
885+
except Exception:
877886
tr.close()
878887
raise
879888

0 commit comments

Comments
 (0)