我已经阅读了文档并且我知道可以使用 BOOST_ASIO_DISABLE_IOCP
预处理器定义来在 Windows XP 的套接字上调用 cancel()
。然后,Boost 库将改用基于 select
的解决方案,一切都会正常进行。
如果这种说法是正确的,那么基于select
的方法有哪些缺点?为什么我们不应该总是定义 BOOST_ASIO_DISABLE_IOCP
?
编辑 1
我已经编译了定义了 BOOST_ASIO_DISABLE_IOCP
的 DLL,没有问题。不幸的是,在与最终应用程序集成后,我遇到了内存访问错误。我还缺少任何其他配置吗?
最佳答案
IOCP 应该提供很多更好的性能。
顺便说一句,你真的必须使用取消
吗?请注意,在您取消套接字上的 i/o 操作后,您不知道数据流的实际状态是什么,因此您需要一种复杂的方法来与您的对等方同步。因此,通常正确的做法是关闭
套接字。
Unfortunately, after the integration with the final application, I'm getting memmroy access errors.
也许,您有几个使用 Boost.Asio header 的模块,但没有为它们所有定义 BOOST_ASIO_DISABLE_IOCP,导致 ODR 违规?
关于c++ - 使用 BOOST_ASIO_DISABLE_IOCP 有什么缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11646765/