1

我已阅读文档,并且了解可以使用BOOST_ASIO_DISABLE_IOCP预处理器定义来调用cancel()Windows XP 中的套接字。然后 Boost 库将使用select基于 - 的解决方案,一切都应该正常工作。

如果这种说法是正确的,那么基于 - 的方法的缺点是什么select?为什么我们不应该总是定义BOOST_ASIO_DISABLE_IOCP


编辑 1

我已经编译了BOOST_ASIO_DISABLE_IOCP定义的DLL,没有问题。不幸的是,在与最终应用程序集成后,我遇到了内存访问错误。我缺少任何其他配置吗?

4

1 回答 1

1

IOCP 应该提供更好的性能。

顺便说一句,你真的必须使用cancel吗?请注意,取消套接字上的 i/o 操作后,您不知道数据流的实际状态是什么,因此您需要一种复杂的方法来与您的对等方同步。因此,通常正确的方法是close使用套接字。

不幸的是,在与最终应用程序集成后,我遇到了 memmroy 访问错误。

也许,您有几个使用 Boost.Asio 标头的模块,但没有为所有模块定义 BOOST_ASIO_DISABLE_IOCP ,从而导致 ODR 违规?

于 2012-07-25T11:11:11.360 回答