我正在使用 WSASend()
通过 IOCP 发送一些数据。我分配一个缓冲区并用要发送的数据填充它,然后创建一个指向我的缓冲区的 WSABUF
并将其传递给 WSASend()
。
如果此函数以重叠方式完成,Winsock 服务提供者有责任在此调用返回之前捕获 WSABUF 结构
所以,我可以堆栈分配我的 WSABUF
结构。但是,我是否也可以在本地分配我的底层缓冲区,在 WSASend()
返回之后但在 IO 完成之前释放它?或者我应该将底层缓冲区的所有权转移给我的 IOCP 工作线程,以便它可以释放它?
答案 0 :(得分:3)
我是否也可以在本地分配我的底层缓冲区,在 WSASend() 返回之后但在 IO 完成之前释放它?
没有。缓冲区必须保持分配状态,直到 IO 完成使用它。只有这样你才能释放它。
<块引用>或者我应该将底层缓冲区的所有权转移给我的 IOCP 工作线程,以便它可以释放它?
是的。