我已阅读文档,并且我了解可以使用BOOST_ASIO_DISABLE_IOCP
预处理程序定义来在Windows XP中的套接字上调用cancel()
。然后,Boost库将使用基于select
的解决方案,一切都应该正常工作。
如果这些陈述属实,基于select
的方法有哪些缺点?为什么我们不应该总是定义BOOST_ASIO_DISABLE_IOCP
?
编辑1
我编译了BOOST_ASIO_DISABLE_IOCP
定义的DLL没有问题。不幸的是,在与最终应用程序集成之后,我遇到了内存访问错误。我缺少任何其他配置吗?
答案 0 :(得分:1)
IOCP应该提供很多更好的性能。
顺便问一下,你真的必须使用cancel
吗?请注意,在取消套接字上的i / o操作后,您不知道数据流的实际状态是什么,因此您需要一种复杂的方法来与同级进行同步。因此,通常正确的方法是close
套接字。
不幸的是,在与最终应用程序集成之后,我就是 得到memmroy访问错误。
也许,你有几个使用Boost.Asio标头的模块,但没有为所有定义BOOST_ASIO_DISABLE_IOCP,导致ODR违规?