Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32k
Closed
Description
Bug report
As a consequence of the optimization introduced in#91166, whenSelectorSocketTransport.writelines
is used with a very large buffer which can't be written in one shot either by usingsocket.send
orsocket.sendmsg
the remaining data in the buffer is never written to the socket.
The following example can be used to reproduce the error:
importasyncioasyncdefsend_message(chunk_size:int,chunks:int):awaitasyncio.sleep(1)reader,writer=awaitasyncio.open_connection("127.0.0.1",9898)data= [bytes(chunk_size)]*chunks+ [b"end"]writer.writelines(data)awaitwriter.drain()writer.close()awaitwriter.wait_closed()asyncdefhandle_message(reader,writer):data=awaitreader.read()print(f"End marker:{data[-3:]!r}")writer.close()awaitwriter.wait_closed()asyncdefrun_server():server=awaitasyncio.start_server(handle_message,"127.0.0.1",9898)asyncwithserver:awaitserver.serve_forever()asyncdefmain():awaitasyncio.gather(run_server(),send_message(6500,100))asyncio.run(main())
The example above printsEnd marker: b'end'
with python 3.11 but not with python3.12.0a6+
Your environment
- CPython versions tested on:
3.12.0a7
- Operating system and architecture: macOS 13.2
Linked PRs
Metadata
Metadata
Assignees
Projects
Status
Done