问题标签 [boost-asio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
451 浏览

c++ - 为传入连接编写过滤器

我在 Win7 下使用 C++/boost::asio。

我试图通过给定的 TCP/IP 端口“嗅探”流量。因此,我想在那个端口上监听,接收消息,分析它们,但也立即让它们进一步流动,就好像我从未截获它们一样。我希望他们沉入通常在该端口上侦听和连接的程序中。想象一个透明代理,但不是用于 HTTP。

我宁愿找到一个基于代码的解决方案,但除此之外,也许你会建议一个工具?

0 投票
2 回答
954 浏览

c++ - 编译 boost.asio 示例时出现链接器错误

我正在尝试编译 boost.asio示例,但出现以下链接器错误:“未定义对_Unwind_Resume'" and "undefined reference to__gxx_personality_v0 的引用”。我一直在搜索谷歌很长时间,但没有任何帮助。我需要链接哪个库?提前致谢!

0 投票
2 回答
16497 浏览

c++ - Boost.ASIO 性能不佳

我在 Windows 上使用 boost::asio 进行了一个非常简单的服务器/客户端性能测试,它的性能似乎真的很差。我希望我只是错误地使用了图书馆,并希望得到任何建议。

我有一个会话类,它写入一个消息长度然后写入一条消息,然后等待读取一个消息长度然后读取一条消息,并且不停地一遍又一遍地这样做。但是,当我在自己的计算机上本地运行它时,我会获得极快的性能;当我在一台计算机上运行服务器并在另一台计算机上运行客户端时,即使在同一网络上,性能也会变慢,读/写操作需要多达 1 秒的时间。

服务器源代码文件如下:

客户端代码如下:

任何帮助将不胜感激,谢谢。


就我的目的而言,发送非常小的消息并想要虚拟实时回复,禁用 Nagle 的算法原来是性能不佳的原因。

0 投票
2 回答
1721 浏览

c++ - 从 Boost.ASIO 的套接字类中分离原生套接字

是否可以从 Boost.ASIO 的套接字类中分离本机套接字?如果是这样,怎么办?我似乎在文档中找不到任何明显的东西。

作为我要完成的任务的快速概述:我有一个类可以建立连接并使用 Boost.ASIO 进行一些协商,然后在成功时传回本机 Windows SOCKET 或在失败时传回 0。

除非我弄错了,否则当我的 boost::asio::basic_socket 被破坏时,本机套接字将被关闭并释放。

0 投票
1 回答
345 浏览

sockets - 当在 boost.asio 流上读取一些数据而不将其读入缓冲区时,如何获得回调?

似乎自 boost 1.40.0 以来,async_read_some()调用的工作方式发生了变化。

以前,你可以传入 anull_buffer并且当有数据要读取时你会得到一个回调,但没有框架将数据读入任何缓冲区(因为没有一个!)。这基本上允许您编写像select()调用一样的代码,当您的套接字上有一些数据时,您会被告知。

在新代码中,行为已更改为以下列方式工作:

如果序列 mb 中所有缓冲区的总大小为 0,则异步读取操作应立即完成并将 0 作为参数传递给指定读取字节数的处理程序。

这意味着我在套接字上检测数据的旧方法(顺便说一下,这个官方示例中显示的方法)不再有效。对我来说,问题是我需要一种方法来检测这一点,因为我已经在 asio 套接字流之上分层了我自己的流类,因此,我不能只从我的流期望存在的套接字中读取数据。我现在能想到的唯一解决方法是读取一个字节,存储它,然后当我的流类请求一些字节时,如果设置了一个字节,则返回该字节:不漂亮。

有谁知道在最新的 boost.asio 代码下实现这种行为的更好方法?

0 投票
1 回答
2298 浏览

c++ - 将 boost::asio 中的异步文件 io 扩展至 Mac OS X

boost::asio 包包含用于在 Windows 中使用 IO 完成端口执行异步文件 io 的类。据我了解,asio 包中包含的其他平台不支持异步文件 io。

我想知道需要做些什么来扩展 asio 并至少支持 Mac OS X 的异步文件 io,但在某种程度上也支持 Linux。我最感兴趣的是在 asio 方面需要做什么,但是由于我对 Mac OS X 编程没有那么丰富的经验,所以我不介意在哪里可以找到有关如何执行异步文件 io 的更多信息的指针Mac OS X 也是 - PBReadForkAsync 是我应该看的吗?

更新: 我终于开始尝试使用 aio_read/aio_write 在 Mac OS X 上构建异步文件 io(外部 boost::asio),但是我无法获得所需的回调数据(请参阅如何获取用户数据Mac OS X 中的 aio 信号处理程序)。

0 投票
1 回答
23115 浏览

boost - 在 cMake 中使用 boost.asio

我对 cMake 比较陌生,我正在尝试在我的项目中使用 boost asio 库。

我能够让 cMake 找到其他 boost 库,例如 smart_ptr 和 lexical_cast,但是当我尝试包含时出现链接器错误boost/asio.hpp

然后我尝试将我的 CMakeLists.txt 从

cMake 然后要求Boost_ASIO_LIBRARY_DEBUGand Boost_ASIO_LIBRARY_RELEASE。我是否以正确的方式进行此操作,如果是这样,我应该在哪里指向 cMake 来找到这些库。(我正在使用 cMake 2.6 和 boost 1.40.0)

0 投票
1 回答
2252 浏览

c++ - boost::asio 中的多次写入到单个套接字

如果您在前一个完成之前尝试对 boost::asio 套接字进行第二次写入,我找不到任何关于会发生什么的事情。这似乎是在许多异步程序中可能发生的事情(因为在执行第一次写入之后,程序将在等待它完成之前继续,可能导致发送第二条消息等等)。我已经想到了一些可能发生的事情(假设在所有情况下,消息都是通过对 async_write 的一次调用发送的)。

所以假设第一次发送不会导致错误:

  • Asio 按顺序发送 msg1,然后是 msg2,甚至可能在单个 TCP 数据包中
  • 第二个 async_write 调用阻塞,直到 msg1 完成
  • 结果未定义

如果 msg1s 中发生错误,我假设异常也会导致 msg2 中止?

如果关联的 io_service 有一个线程池,还是只有一个线程,这也会受到影响吗?

如果它不安全,那么是否有人编写了某种简单的包装器来维护要发送的消息队列,一个一个地发送它们并在任何写入处理程序抛出异常时中止?

0 投票
1 回答
1076 浏览

c++ - 异步写入套接字和用户值(boost::asio 问题)

我很新来提升。我需要一个跨平台的低级 C++ 网络 API,所以我选择了 asio。现在,我已经成功连接并写入了一个套接字,但是由于我使用的是异步读/写,我需要一种方法来跟踪请求(如果你愿意的话,要有某种 ID)。我查看了文档/参考,发现无法将用户数据传递给我的处理程序,我能想到的唯一选择是创建一个特殊的类作为回调并跟踪它的 id,然后传递它到套接字作为回调。有没有更好的办法?或者是最好的方法吗?

0 投票
2 回答
3962 浏览

c++ - Boost::bind 一个带有 boost::function 参数的方法

我想为 async_write 提供一个额外的 boost::function。我希望首先调用连接自己的 HandleWrite 函数,然后调用提供的 boost::function。

Connection 的成员方法绑定到 asio async_write

尝试将 HandleWrite 绑定到 asio async_write 并提供另一个绑定作为处理程序的值。这不编译。我究竟做错了什么?

我从编译器得到的错误信息如下: