在重叠模式下使用 WSASend 时,我应该什么时候释放缓冲区?

When using WSASend in overlapped mode, when should I free the buffers?

我正在使用 WSASend() 通过 IOCP 发送一些数据。我分配一个缓冲区并用要发送的数据填充它,然后创建一个 WSABUF 指向我的缓冲区并将其传递到 WSASend().

documentation 说:

If this function is completed in an overlapped manner, it is the Winsock service provider's responsibility to capture the WSABUF structures before returning from this call

因此,我可以堆栈分配我的 WSABUF 结构。但是,我是否也可以在本地分配我的底层缓冲区,在 WSASend() returns 之后但在 IO 完成之前释放它?或者我应该将底层缓冲区的所有权转移到我的 IOCP 工作线程以便它可以释放它吗?

can I also locally allocate my underlying buffer, freeing it after WSASend() returns but before the IO finishes?

没有。缓冲区必须保持分配状态,直到 IO 完全使用它完成之后。只有这样你才能释放它。

Or should I transfer ownership of the underlying buffer to my IOCP worker thread so that it can free it?

是的。