相关疑难解决方法(0)

Boost的最佳文档:asio?

boost网站上提供的文档是有限的.

从我能够阅读的内容来看,普遍的共识是很难在boost :: asio库上找到好的文档.

这是真的吗?如果是这样,为什么?

笔记:

  • 我已经找到了(非增强型)Asio网站 - 文档看起来与boost网站上的相同.
  • 我知道Boost :: asio是新的!我正在寻找解决方案而不是借口.

编辑:

  • 有人建议将网络库添加到由Boost:asio(Christopher Kohlhoff)的作者编写的TR2标准库中.虽然它不是boost:asio的文档,但它确实将它作为TR2提案的基础.由于作者在本文档中付出了更多努力,我发现它有点帮助,如果不是作为参考,那么至少作为概述.

c++ boost boost-asio

139
推荐指数
7
解决办法
6万
查看次数

需要对同步与异步asio操作进行一些澄清

据我所知,同步和异步操作之间的主要区别.即write()read()VS async_write()并且async_read()是前者,不返回,直到操作完成-或无差错,以及最后的,立即返回.

由于异步操作由一个io_service.run()在受控操作完成之前未完成的操作控制.在我看来,顺序操作中涉及与POP3等协议的TCP/IP连接,其中操作是如下序列:

 C: <connect>
 S: Ok.
 C: User...
 S: Ok.
 C: Password
 S: Ok.
 C: Command
 S: answer
 C: Command
 S: answer
 ...
 C: bye
 S: <close>
Run Code Online (Sandbox Code Playgroud)

同步/异步运算符之间的区别没有多大意义.

当然,在这两种操作中,总是存在程序流程在某些情况下无限期停止的风险 - 使用计时器 - 但我想知道一些更多的授权意见.

我必须承认这个问题定义不明确,但我想听听一些关于何时使用其中一个的建议.我在使用MS Visual Studio调试关于我正在使用的POP3客户端中的异步SSL操作时遇到了问题,有时候认为在这个问题上使用异步可能是个坏主意.

c++ asynchronous tcp synchronous boost-asio

19
推荐指数
2
解决办法
1万
查看次数

使用boost :: optional时避免临时

boost :: optional支持in_place构造,如下所示:

#include <boost/optional.hpp>
#include <boost/utility/typed_in_place_factory.hpp>

class Foo
{
    int a,b;

  public:
    Foo(int one, int two) : a(one),b(two) {}
};


int main()
{
    boost::optional<Foo> fooOpt(boost::in_place<Foo>(1,3));
}
Run Code Online (Sandbox Code Playgroud)

一旦我们有一个初始化的fooOpt,有没有一种方法可以为它分配一个新的Foo而不创建一个临时的?

就像是 :

fooOpt = boost::in_place<Foo>(1,3);
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ boost optional

9
推荐指数
1
解决办法
5158
查看次数

C++ Boost ASIO async_send_to内存泄漏

我目前正在研究UDP套接字客户端.我目前注意到内存泄漏,我已经尝试了几个希望压制它的东西,但它仍然占上风.在我的主力,我有一个char*已经malloc'd.然后我调用下面的函数来发送数据:

void Send(const char* data, const int size) {
    Socket.async_send_to(boost::asio::buffer(data, size), Endpoint, boost::bind(&MulticastSender::HandleSendTo, this, boost::asio::placeholders::error));   
}
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码,它将始终泄漏内存.但是,如果我注释掉async_send_to呼叫,则内存保持一致.我已经尝试了几种变体(见下文),但它们似乎只是为了加速内存泄漏.

有几个注意事项,在调用完成之前,有可能char*传递给Send free.但是,在我的变化中,我已采取预防措施来处理这个问题.

变化1:

void Send(const char* data, const int size) {
    char* buf = (char*)malloc(size);
    memcpy(buf, data, size);
    Socket.async_send_to(boost::asio::buffer(buf, size), Endpoint, boost::bind(&MulticastSender::HandleSendTo, this, boost::asio::placeholders::error, buf));   
}

void HandleSendTo(const boost::system::error_code& ec, const char* buf) {
    free(buf);
}
Run Code Online (Sandbox Code Playgroud)

变化2:

class MulticastSender {
    char* Buffer;

    public:
    void Send(const char* data, const int size) {
        Buffer = (char*)malloc(size); …
Run Code Online (Sandbox Code Playgroud)

c++ memory memory-leaks boost-asio

3
推荐指数
1
解决办法
2550
查看次数