@@ -267,10 +267,30 @@ async def close(self, *, code: int = WSCloseCode.OK, message: bytes = b"") -> bo
267
267
self ._reader .feed_data (WS_CLOSING_MESSAGE , 0 )
268
268
await self ._close_wait
269
269
270
- if not self ._closed :
271
- self ._set_closed ()
270
+ if self ._closed :
271
+ return False
272
+
273
+ self ._set_closed ()
274
+ try :
275
+ await self ._writer .close (code , message )
276
+ except asyncio .CancelledError :
277
+ self ._close_code = WSCloseCode .ABNORMAL_CLOSURE
278
+ self ._response .close ()
279
+ raise
280
+ except Exception as exc :
281
+ self ._close_code = WSCloseCode .ABNORMAL_CLOSURE
282
+ self ._exception = exc
283
+ self ._response .close ()
284
+ return True
285
+
286
+ if self ._close_code :
287
+ self ._response .close ()
288
+ return True
289
+
290
+ while True :
272
291
try :
273
- await self ._writer .close (code , message )
292
+ async with async_timeout .timeout (self ._timeout .ws_close ):
293
+ msg = await self ._reader .read ()
274
294
except asyncio .CancelledError :
275
295
self ._close_code = WSCloseCode .ABNORMAL_CLOSURE
276
296
self ._response .close ()
@@ -281,31 +301,11 @@ async def close(self, *, code: int = WSCloseCode.OK, message: bytes = b"") -> bo
281
301
self ._response .close ()
282
302
return True
283
303
284
- if self ._close_code :
304
+ if msg .type is WSMsgType .CLOSE :
305
+ self ._close_code = msg .data
285
306
self ._response .close ()
286
307
return True
287
308
288
- while True :
289
- try :
290
- async with async_timeout .timeout (self ._timeout .ws_close ):
291
- msg = await self ._reader .read ()
292
- except asyncio .CancelledError :
293
- self ._close_code = WSCloseCode .ABNORMAL_CLOSURE
294
- self ._response .close ()
295
- raise
296
- except Exception as exc :
297
- self ._close_code = WSCloseCode .ABNORMAL_CLOSURE
298
- self ._exception = exc
299
- self ._response .close ()
300
- return True
301
-
302
- if msg .type is WSMsgType .CLOSE :
303
- self ._close_code = msg .data
304
- self ._response .close ()
305
- return True
306
- else :
307
- return False
308
-
309
309
async def receive (self , timeout : Optional [float ] = None ) -> WSMessage :
310
310
receive_timeout = timeout or self ._timeout .ws_receive
311
311
0 commit comments