如何在Windows平台启用boost::posix::stream_descriptor?
boost::posix::stream_descriptor在mingw64环境不可用的解决方法
boost::posix::stream_descriptor 是POSIX平台专属组件,依赖POSIX标准的文件描述符语义,Windows(包括mingw编译环境)默认不提供该组件,无法直接启用。
解决方案
- 替换为Windows平台专属的同功能组件:使用
boost::asio::windows::stream_handle,该组件是boost为Windows平台原生句柄设计的包装类,完全支持你需要的wait_read、wait_write方法,API逻辑和stream_descriptor高度一致,只需要把你初始化拿到的Windows蓝牙套接字句柄传入构造函数即可。 - 跨平台兼容处理:可以通过编译宏做分支判断,不需要分别写两套业务逻辑,参考代码如下:
// 跨平台descriptor类型定义 #ifdef _WIN32 #include <boost/asio/windows/stream_handle.hpp> using socket_descriptor = boost::asio::windows::stream_handle; #else #include <boost/asio/posix/stream_descriptor.hpp> using socket_descriptor = boost::asio::posix::stream_descriptor; #endif // 后续业务逻辑统一使用socket_descriptor类型,初始化时传入对应平台的套接字句柄/文件描述符即可
注意事项
- msys2 mingw64源提供的boost安装包已经默认编译了Windows平台的asio相关组件,不需要额外配置编译选项启用,只要包含正确的头文件即可正常编译。
- Windows平台下创建的蓝牙BSD套接字返回的是WSA句柄,可直接传入
stream_handle构造函数,不需要做额外的格式转换。
内容的提问来源于stack exchange,提问作者lord.didger
相关产品推荐
相关产品推荐

