diff options
| author | Damien George <damien@micropython.org> | 2021-06-25 16:53:20 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2021-06-26 22:30:22 +1000 |
| commit | 7ec95c2768793c28351d13a9c471991bb2d6dcff (patch) | |
| tree | cc65bc817cca1c6c9455316c1a588068d26e5b4b /tests | |
| parent | cbc9a591a437177ac978302c16b56dd6cb46104f (diff) | |
extmod/uasyncio: Get addr and bind server socket before creating task.
Currently when using uasyncio.start_server() the socket configuration is
done inside a uasyncio.create_task() background function. If the address
and port are already in use however this throws an OSError which cannot be
cleanly caught behind the create_task().
This commit moves the getaddrinfo and socket binding to the start_server()
function, and only creates the task if that succeeds. This means that any
OSError from the initial socket configuration is propagated directly up the
call stack, compatible with CPython behaviour.
See #7444.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/net_hosted/uasyncio_start_server.py | 31 | ||||
| -rw-r--r-- | tests/net_hosted/uasyncio_start_server.py.exp | 5 |
2 files changed, 36 insertions, 0 deletions
diff --git a/tests/net_hosted/uasyncio_start_server.py b/tests/net_hosted/uasyncio_start_server.py new file mode 100644 index 000000000..f13402979 --- /dev/null +++ b/tests/net_hosted/uasyncio_start_server.py @@ -0,0 +1,31 @@ +# Test basic behaviour of uasyncio.start_server() + +try: + import uasyncio as asyncio +except ImportError: + try: + import asyncio + except ImportError: + print("SKIP") + raise SystemExit + + +async def test(): + # Test creating 2 servers using the same address + print("create server1") + server1 = await asyncio.start_server(None, "0.0.0.0", 8000) + try: + print("create server2") + await asyncio.start_server(None, "0.0.0.0", 8000) + except OSError as er: + print("OSError") + + # Wait for server to close. + async with server1: + print("sleep") + await asyncio.sleep(0) + + print("done") + + +asyncio.run(test()) diff --git a/tests/net_hosted/uasyncio_start_server.py.exp b/tests/net_hosted/uasyncio_start_server.py.exp new file mode 100644 index 000000000..0fb8e6a63 --- /dev/null +++ b/tests/net_hosted/uasyncio_start_server.py.exp @@ -0,0 +1,5 @@ +create server1 +create server2 +OSError +sleep +done |
