使用AcceptEx直接调用或使用WSAIoctl获取的函数指针之间是否有任何区别。
MSDN并未完全涵盖有关使用AcceptEx作为直接呼叫可能遇到的性能问题和其他问题的问题。
其他问题是: 如果我的程序中有4个侦听套接字,我是否需要为每个侦听套接字调用WSAIoctl,当然还要为每个套接字存储函数指针?或者它足以为任何套接字调用一次,而不是与其他套接字一起使用。
提前感谢。
答案 0 :(得分:6)
在事先没有获得函数指针的情况下调用该函数 (即,通过链接mswsock.lib并直接调用AcceptEx) 由于AcceptEx位于分层架构之外,因此成本很高 Winsock2的。 AcceptEx必须使用WSAIoctl for请求函数指针 每次调用应用程序实际尝试的机会 从在mswsock之上分层的提供程序调用AcceptEx(请参阅 图3)。为避免每次通话造成显着的性能损失, 打算使用这些API的应用程序应该获取 指向这些函数的指针直接来自分层提供者 调用WSAIoctl。
答案 1 :(得分:4)
的WSAIoctl。它是一个扩展提供程序,用于winsock功能的新功能/新增功能,每个新的Windows版本通常会添加几个新的扩展。
AcceptEx函数指针: 使用AcceptEx直接将应用程序绑定到需要MSWsock.dll的Microsoft提供程序。至于正确性,你可能应该以msdn的方式进行,并通过扩展使用这些功能。
只需将其设置一次并像使用MSWsock-AcceptEx一样使用(您仍将使用相同的东西)
至于速度/性能,我建议专注于套接字池。
修改强> 应澄清(msdn)分离的原因 - 扩展是Microsoft特定的功能,不应强制其他提供者实现。