在重叠模式下使用 WSASend 时,我应该何时释放缓冲区?
Posted
技术标签:
【中文标题】在重叠模式下使用 WSASend 时,我应该何时释放缓冲区?【英文标题】:When using WSASend in overlapped mode, when should I free the buffers? 【发布时间】:2021-07-14 19:31:38 【问题描述】:我正在使用WSASend()
通过 IOCP 发送一些数据。我分配一个缓冲区并用要发送的数据填充它,然后创建一个指向我的缓冲区的WSABUF
并将其传递给WSASend()
。
documentation 说:
如果此功能以重叠方式完成,则 Winsock 服务提供者有责任在从该调用返回之前捕获 WSABUF 结构
所以,我可以堆栈分配我的WSABUF
结构。但是,我是否也可以在本地分配我的底层缓冲区,在WSASend()
返回之后但在 IO 完成之前释放它?或者我应该将底层缓冲区的所有权转移给我的 IOCP 工作线程,以便它可以释放它?
【问题讨论】:
【参考方案1】:我也可以在本地分配我的底层缓冲区,在 WSASend() 返回之后但在 IO 完成之前释放它吗?
没有。缓冲区必须保持分配状态,直到 IO 完全使用它。只有这样你才能释放它。
或者我应该将底层缓冲区的所有权转移给我的 IOCP 工作线程,以便它可以释放它?
是的。
【讨论】:
以上是关于在重叠模式下使用 WSASend 时,我应该何时释放缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章
readv()、writev()、WSARecv()、WSASend()