Windows注册的I / O Win 8.1 RioCreateRequestQueue错误10045

使用Win8.1和Visual Studio 2013,我testing了我可以find的每个Windows注册I / O示例(约5)。 所有导致RioCreateRequestQueue()的错误10045,如下所示。

c:>rioServerTest.exe InitialiseRio Start InitialiseRio End CreateCompletionQueue Start CreateCompletionQueue End CreateRequestQueue start RIOCreateRequestQueue Error: 10045 

相关的代码是:

 void *pContext = 0; printf("CreateRequestQueue start\n"); g_requestQueue = g_rio.RIOCreateRequestQueue( g_socket, // Socket (ULONG) 10, // MaxOutstandingReceive, (ULONG) 1, // maxReceiveDataBuffers, (ULONG) 10, // MaxOutstandingSend, (ULONG) 1, // MaxSendDataBuffers g_completionQueue, // ReceiveCQ g_completionQueue, // SendCQ pContext); // SocketContect if (g_requestQueue == RIO_INVALID_RQ) { printf_s("RIOCreateRequestQueue Error: %d\n", GetLastError()); exit(1); } printf("CreateRequestQueue End\n"); 

根据我已阅读的文献,注册I / O旨在与Windows 8及更高版本和Windows Server 2012及更高版本一起使用。

任何人都可以通过一个例子向我解释如何让这个工作在Win8.1上? TIA

Solutions Collecting From Web of "Windows注册的I / O Win 8.1 RioCreateRequestQueue错误10045"

10045是WSAEOPNOTSUPP ,它的描述是“Operation not supported。试图操作不支持引用的对象类型,通常这发生在一个套接字描述符到一个不支持这个操作的套接字试图接受一个数据报上的连接时插座。”

所以实际上,我们需要看到的代码实际上就是您创建套接字的地方。

你的套接字创建代码应该是这样的:

  socket = ::WSASocket( AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_REGISTERED_IO); 

我在这里有一些示例文章(包括完整源代码的一整套RIO,UDP服务器设计),所有这些文章都在RIO支持的所有操作系统上运行。