GQCS得到通知,当WSAsend返回0?(GQCS gets notification, when

2019-10-19 05:35发布

虽然我已经阅读了很多关于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));
           ....
          }

还有就是在WSAsend操作有时可能完成立即返回零MSDN说(它在我的测试服务器的过程中从未发生过)。 因此,如果发生这种情况, GetQueuedCompletionStatus会得到通知?

提前致谢。

Answer 1:

如果任何套接字API调用该发起重叠操作完成返回0时则完成产生并发布到IOCP这将产生一个完成到一个I / O完成端口。 请参阅此Microsoft知识库文章的详细信息。 因此,你需要对非错误返回情况下不需要特殊处理。

除了...

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



文章来源: GQCS gets notification, when WSAsend returns 0?
标签: send iocp