import asyncio import socket ADDR = ('10.0.2.1', 22) async def test(loop): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setblocking(False) try: with s: # Without 'wait_for' or 'timeout=None', it shows # # Fail: [Errorno 10060] Connect call failed ('10.0.2.1', 22) # # await asyncio.wait_for( # loop.sock_connect(s, ADDR), # timeout=None, # loop=loop, # ) # With 'timeout', it raises # # Traceback (most recent call last): # File "C:\Users\alisue/test.py", line 41, in # loop.run_until_complete(test(loop)) # File "C:\Python36\lib\asyncio\base_events.py", line 454, in run_until_complete # self.run_forever() # File "C:\Python36\lib\asyncio\base_events.py", line 421, in run_forever # self._run_once() # File "C:\Python36\lib\asyncio\base_events.py", line 1395, in _run_once # event_list = self._selector.select(timeout) # File "C:\Python36\lib\selectors.py", line 323, in select # r, w, _ = self._select(self._readers, self._writers, [], timeout) # File "C:\Python36\lib\selectors.py", line 314, in _select # r, w, x = select.select(r, w, w, timeout) # OSError: [WinError 10038] ........... # await asyncio.wait_for( loop.sock_connect(s, ADDR), timeout=3, loop=loop, ) except Exception as e: print('Fail: %s' % e) else: print('Success') if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(test(loop))