aio-libs / aiohttp

Asynchronous HTTP client/server framework for asyncio and Python
https://docs.aiohttp.org
Other
14.96k stars 2k forks source link

EofStream and websocket.receive_* functions #6800

Open socketpair opened 2 years ago

socketpair commented 2 years ago

aiohttp 3.8.1

await websocket.receive_json() Will die with TypeError on WSMsgType.CLOSED.

2784 is fixed, yes:

 async def __anext__(self) -> WSMessage:
        msg = await self.receive()
        if msg.type in (WSMsgType.CLOSE, WSMsgType.CLOSING, WSMsgType.CLOSED):
            raise StopAsyncIteration
        return msg

Yes, bug is fixed in iterator but NOT fixed for websocket.receive_* functions, like receive_json()

I would raise RuntimeError or so if corresponding message "type" (like bytes, str, or json) can not be received.

rigtorp commented 1 year ago

First I want to thank the developers for this amazing library!

I have the same issue. The webscocket.receeive_* functions should throw ConnectionResetError when there are connection related errors instead of TypeError. It will already throw this error if the auto ping feature is enabled and the pong call fails.