我应该为 WSASend 和 WSARecv 使用不同的 WSAOVERLAPPED 结构吗?

Posted

技术标签:

【中文标题】我应该为 WSASend 和 WSARecv 使用不同的 WSAOVERLAPPED 结构吗?【英文标题】:Should I use different WSAOVERLAPPED struct for WSASend and WSARecv? 【发布时间】:2015-06-22 05:27:03 【问题描述】:

我正在使用 WinSock 开发一个服务器-客户端应用程序。

对 WSASend 和 WSARecv 使用相同的 WSAOVERLAPPED 效果好吗?

【问题讨论】:

好吧,如果您有多个未完成的 I/O 请求,那么您必须使用单独的结构。 10 个未完成的 WSARecv() 调用需要 10 个不同的重叠块。 【参考方案1】:

如果您使用事件句柄(WSAOVERLAPPED 结构的成员),您绝对应该使用两种不同的结构来发送和接收。

【讨论】:

如果您完全使用重叠 I/O,则必须为每个未完成的 I/O 请求使用不同的重叠块。

以上是关于我应该为 WSASend 和 WSARecv 使用不同的 WSAOVERLAPPED 结构吗?的主要内容,如果未能解决你的问题,请参考以下文章

WSASend() 和 WSARecv() 的所有错误代码是不是意味着套接字已断开连接?

如何知道完成数据包是针对 WSASend() 还是 WSARecv() 还是 AcceptEx()?

io 完成端口问题,每个 GetQueuedCompletionStatus 调用多个 wsarecv 或 wsasend

WSARecv 钩子:防止数据包被可执行文件接收

我应该同时进行 WSASend() 调用吗?

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