GQCS 收到通知,当 WSAsend 返回 0 时?
Posted
技术标签:
【中文标题】GQCS 收到通知,当 WSAsend 返回 0 时?【英文标题】:GQCS gets notification, when WSAsend returns 0? 【发布时间】:2014-01-12 13:22:16 【问题描述】:虽然我已经阅读了很多关于 WSAsend (msdn) 的内容,但我仍然需要一些说明。
我的部分代码:
int rc;
rc=WSASend(Socket,....);
if (rc==0) ....
else if ((rc == SOCKET_ERROR) && (WSA_IO_PENDING != (err = WSAGetLastError())))
printf("WSASend failed with error: %d Socket(%d) \n", err,(pTmp1->Socket));
....
msdn 中说 WSAsend 操作有时可能会立即完成返回零(在我的测试服务器期间从未发生过)。那么如果发生这种情况,GetQueuedCompletionStatus
会收到通知吗?
提前致谢。
【问题讨论】:
【参考方案1】:如果任何发起重叠操作的套接字 API 调用将在完成时生成对 I/O 完成端口的完成返回 0,则生成完成并将其发布到 IOCP。有关详细信息,请参阅this Microsoft knowledge base article。因此,您不需要对非错误返回情况进行特殊处理。
除了...
如果您使用SetFileCompletionNotificationMode() 来设置FILE_SKIP_COMPLETION_PORT_ON_SUCCESS
模式。在这种情况下,返回值 0 不会导致正常的完成处理,您需要在 API 调用成功后进行完成处理。
【讨论】:
以上是关于GQCS 收到通知,当 WSAsend 返回 0 时?的主要内容,如果未能解决你的问题,请参考以下文章