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 时?的主要内容,如果未能解决你的问题,请参考以下文章