草庐IT

asio_handler_invoke

全部标签

c++ - 在 boost::asio 程序中刷新缓冲区

基本上我正在使用boost套接字库编写一个简单的程序...我有两个程序,一个客户端和一个服务器。服务器等待来自客户端的连接,当它找到一个连接时,客户端向服务器发送一条消息,服务器打印出来,这在客户端第一次查询服务器时有效,但过了一会儿,一个奇怪的模式开始让我们说我们的服务器是运行,我通过执行两次使用了客户端程序:./clientlocalhostnamemessage./client本地主机名测试服务器的输出0f首先是:名称:消息然而接下来它会显示姓名:testage我不知道为什么会这样,但我知道这一定是服务器的问题,因为每个客户端都独立发送一个数据包,服务器只是打印出来...我认为这

c++ - 是否有用于阻塞 boost::asio TCP 连接的 boost::iostreams(双向)设备?

我正在研究可移植的C++库,阻止对文件系统和网络的I/O访问。看起来boost::filesystem、boost::iostreams和boost::asio将介于这三者之间他们的工作。明确地说,我目前对boost::asio的异步方面不感兴趣;我只想要一个可移植的阻塞式网络接口(interface)。深入研究,我看到boost::iostreams有一个设备的概念,每个设备都有一个关联的modeconcept.双向模式似乎专门为流式访问全双工TCP连接而量身定制。太棒了。boost::iostreams似乎不支持实际打开TCP连接(与本地文件系统不同。)没关系,boost::asi

c++ - 关闭 boost asio ssl 套接字时需要调用 ssl::stream::shutdown 吗?

我的代码如下:declaration:boost::asio::ssl::streamm_remote_socket;m_remote_socket.shutdown(ec);if(ec){cdbug每次调用m_remote_socket.shutdown时,它都会出错。这种错误值非常大的未知错误。但是不调用m_remote_socket.shutdown直接调用m_remote_socket.lowest_layer().shutdown()也是可以的。谁能告诉我如何关闭ssl流套接字? 最佳答案 对ssl::stream及其lo

c++ - 从另一个线程恢复 asio 协程

我在从另一个线程恢复boost::asio协程时遇到问题。这是示例代码:#include#include#include#include#includeusingnamespacestd;usingnamespaceboost;voidfoo(asio::steady_timer&timer,asio::yield_contextyield){cout问题是asio::steady_timer对象不是线程安全的,程序崩溃了。但是,如果我尝试使用互斥锁来同步对它的访问,那么我就会遇到死锁,因为foo的范围没有保留。#include#include#include#include#incl

c++ - boost::asio:线程本地异步事件

我将在我的服务器应用程序中创建x个线程。x将是机器上的内核数量,这些线程将是(非超线程)内核绑定(bind)的。自然地,对于这个方案,我想跨线程分配传入连接,目的是确保一旦将连接分配给线程,它只会从该特定线程中得到服务。这是如何在boost::asio中实现的?我在想:单个socket绑定(bind)到由多个io_service共享的地址,其中每个线程都有自己的io_service。这种推理是否正确?编辑:看来我得自己回答这个问题了。 最佳答案 是的,你的推理基本正确。您将为每个核心创建一个线程,为每个线程创建一个io_servic

c++ - boost::asio 是否进行过多的小堆分配或者我错了吗?

#include#include#include#includeusingboost::asio::ip::tcp;classsession{public:session(boost::asio::io_service&io_service):socket_(io_service){}tcp::socket&socket(){returnsocket_;}voidstart(){socket_.async_read_some(boost::asio::buffer(data_,max_length-1),boost::bind(&session::handle_read,this,bo

c++ - boost::asio::async_read_until 问题

我正在尝试修改来自boostasio的echo服务器示例,当我尝试使用boost::asio::async_read_until时遇到了问题。这是代码:#include#include#include#includeusingboost::asio::ip::tcp;classsession{public:session(boost::asio::io_service&io_service):socket_(io_service){}tcp::socket&socket(){returnsocket_;}voidstart(){std::coutsocket(),boost::bind

c++ - boost asio 和 shared_ptr 的扩散

我最近开始使用boost。到目前为止,大多数事情都非常简单。但是让我发疯的一件事是shared_ptr在整个boost过程中的扩散。即使在简单的示例中,也会使用shared_ptr。所以我的问题是,如果我使用boost来接受tcp连接然后处理它们。只要我保证在堆上创建的对象(boost::asio::ip::tcp::socket,以及将为异步方法回调的类)在我完成使用tcp之前不会被删除,那么我不需要shared_ptr对吗?我写了一个简单的tcp服务器和客户端,没有使用共享ptr,它可以工作。但我只是想要一些外部确认,以证明我的评估是正确的。此外,根据您的经验,您是否曾经需要使用s

C++ boost Asio : How do I have multiple clients?

如何在boostasio中通过单个端口建立多个连接?是否需要为每个客户端配备一个套接字? 最佳答案 当一个新的连接被接受时,一个新的套接字将被创建,你不必自己创建套接字。您是否检查过手册中的示例?与聊天服务器一样,我认为它可以处理多个连接。 关于C++boostAsio:HowdoIhavemultipleclients?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/80072

c++ - boost asio 以写入文件

我想异步写入文件。我有一个带有函数的类,该函数接受vector和文件名,并将其发送到文件。这个函数可以从类外被调用几千次。我想执行写异步的原因是......调用者可以只请求写,然后不必担心或等待写完成。我没有使用套接字、tcp...我正在研究boost::asio,试图找到例子——我能找到的都是使用网络的例子:http://liveworkspace.org/code/3R3RUd%240SerializeandsendadatastructureusingBoost?boost::asioasync_readguaranteeallbytesareread还有更多。有人可以推荐一个文