没有WSAIoctl的AcceptEx

时间:2010-12-17 12:56:41

标签: c++ sockets

使用AcceptEx直接调用或使用WSAIoctl获取的函数指针之间是否有任何区别。

MSDN并未完全涵盖有关使用AcceptEx作为直接呼叫可能遇到的性能问题和其他问题的问题。

其他问题是: 如果我的程序中有4个侦听套接字,我是否需要为每个侦听套接字调用WSAIoctl,当然还要为每个套接字存储函数指针?或者它足以为任何套接字调用一次,而不是与其他套接字一起使用。

提前感谢。

2 个答案:

答案 0 :(得分:6)

  

在事先没有获得函数指针的情况下调用该函数   (即,通过链接mswsock.lib并直接调用AcceptEx)   由于AcceptEx位于分层架构之外,因此成本很高   Winsock2的。 AcceptEx必须使用WSAIoctl for请求函数指针   每次调用应用程序实际尝试的机会   从在mswsock之上分层的提供程序调用AcceptEx(请参阅   图3)。为避免每次通话造成显着的性能损失,   打算使用这些API的应用程序应该获取   指向这些函数的指针直接来自分层提供者   调用WSAIoctl。

来自http://msdn.microsoft.com/en-us/magazine/cc302334.aspx

答案 1 :(得分:4)

的WSAIoctl。它是一个扩展提供程序,用于winsock功能的新功能/新增功能,每个新的Windows版本通常会添加几个新的扩展。

AcceptEx函数指针: 使用AcceptEx直接将应用程序绑定到需要MSWsock.dll的Microsoft提供程序。至于正确性,你可能应该以msdn的方式进行,并通过扩展使用这些功能。

只需将其设置一次并像使用MSWsock-AcceptEx一样使用(您仍将使用相同的东西)

至于速度/性能,我建议专注于套接字池。

修改 应澄清(msdn)分离的原因 - 扩展是Microsoft特定的功能,不应强制其他提供者实现。