当WSAsend返回0时,GQCS会收到通知吗?

时间:2014-01-12 13:22:17

标签: send iocp

虽然我已经阅读了很多关于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 个答案:

答案 0 :(得分:2)

如果任何启动重叠操作的套接字API调用将在完成时生成I / O完成端口的完成,则返回0,然后生成完成IS并将其发布到IOCP。有关详细信息,请参阅this Microsoft knowledge base article。因此,对于非错误返回情况,您无需特殊处理。

...除

如果您使用SetFileCompletionNotificationMode()设置FILE_SKIP_COMPLETION_PORT_ON_SUCCESS模式。在这种情况下,返回值0不会导致正常的完成处理,并且您需要在API调用成功后进行完成处理。