草庐IT

Boost-asio

全部标签

c++ - boost::asio 服务器多进程

我想制作一个简单的多进程(非线程)服务器。我已经看到它一次处理一个请求的迭代示例。相反,我需要同时处理更多请求(更多请求少于10个)。在经典的c和c++示例中,我看到服务器的设计如下:intlistensd,connsd;//listeningsocketandconectionsocketpid_tpid;//processidlistensd=socket(....);bind(listensd,...);listen(listensd,...);for(;;){connsd=accept(listensd,...);if((pid=fork())==0)//childproces

boost::asio 发送数据比通过 TCP 接收数据更快。或者如何禁用缓冲

我创建了一个客户端/服务器程序,客户端启动Writer类的一个实例,服务器启动一个实例读者类。然后Writer将写入DATA_SIZE字节的数据每USLEEPmili秒异步发送给Reader。Writer的每个连续的async_write请求都已完成仅当来自先前请求的“写时”处理程序具有被调用。问题是,如果Writer(客户端)正在向套接字比阅读器(服务器)能够接收这似乎成为行为:Writer将开始写入(我认为)系统缓冲区,甚至尽管数据还没有被Reader接收到正确调用“写入时”处理程序。当缓冲区已满时,boost::asio不会触发“写入时”处理程序,直到缓冲区变小。与此同时,Rea

c++ - Boost::ASIO:在多线程上使用 tcp::socket

所以我有一个TCP服务器,它在特定端口上等待客户端连接。如果有一个客户端连接,我会构造一个带有一些asio::io_service的tcp::socket对象,然后我接受那个套接字。示例:voidGateway::server(boost::asio::io_service&io_service,unsignedshortport){tcp::acceptora(io_service,tcp::endpoint(tcp::v4(),port));boolUARTToWiFiGatewayStarted=false;for(;;){tcp::socketsock(io_service);

c++ - 在不关闭 native 处理程序的情况下销毁 Boost Asio 套接字

我面临以下问题。我正在尝试将第三方库与boostAsio一起使用,我需要在io_service事件循环中注入(inject)该库使用的一些套接字描述符。我使用的方法是创建一个boost::asio::ip::tcp::socket来传递我的库提供的native处理程序。问题是库只会传达它对特定套接字通知不感兴趣(这意味着库可能会关闭套接字或稍后重用它)。无论如何,我想清理升压套接字并销毁它们,但不关闭native处理程序(即文件描述符)。简而言之,有没有什么方法可以在不关闭底层处理程序的情况下销毁boost::asio::ip::tcp::socket?我知道改用posix::stre

sockets - 如何模拟 boost::asio::write 超时

我正在尝试用超时模拟boost::asio::write。或者你可以说,我正在尝试使用带有超时的boost::asio::async_write。如我所见,boost::asio::write会阻塞,直到所有数据都在另一侧被写入和读取。这种功能当然需要超时。那么,通读thissimpleanswerhere由RobertHegner演示如何使用timeout执行boost::asio::async_read,我正在尝试采用相同的逻辑通过这样做来写:size_twrite_data_with_time_out(){longtime_out_secs=2;boost::optionalti

c++ - 无法使用 boost asio TCP 套接字解释带宽性能差

下面是我写的一个简单的TCP服务器和匹配客户端开始练习boost的asio库的例子,ExampleTCPClient/Server.客户端简单地连接并尽可能快地从内存缓冲区发送数据。服务器仅监听消息并打印它从完整消息中获得的字节数。仅此而已-仅此而已。Booth示例在几个线程上运行,大部分使用默认设置,没有随意放置的sleep可能会把事情搞砸......它们真的很容易理解,除了直接调用boost目标之外几乎没有其他隔离问题。问题是,客户端的输出如下:兆字节/秒:51.648908,千兆字节/秒:0.051649,兆字节/秒:413.191267,千兆字节/秒:0.413191注意事项:

c++ - Boost ASIO 服务器 - 检测空闲连接

这篇文章的目的是弄清楚如何在基于BoostASIO的HTTP服务器上实现Keep-Alive超时。这有两部分-当客户端关闭连接时当客户端连接处于非事件状态时我相信,1)以上可以通过在native套接字句柄上设置TCP_KEEPIDLE、TCP_KEEPCNT和TCP_KEEPINTVL选项来检测。检测上面2)的最佳方法是什么?我已尝试在native套接字上设置SO_RCVTIMEO和SO_SNDTIMEO,但服务器似乎没有在配置的超时间隔结束时关闭连接。非常感谢任何指点。谢谢! 最佳答案 您想要检测客户端在X时间内未向您发送任何内容

c++ - 如何在异步 boost 中只读取一个数据包数据?

我有一个tcp客户端需要通过tcp读取数据但是我每次需要读取一个tcp包数据。我使用这段代码:socket_[socket_index]->async_receive(boost::asio::buffer(buf,max_size),boost::bind(&pipe::handle_read,shared_from_this(),boost::asio::placeholders::error,socket_index,boost::asio::placeholders::bytes_transferred));但有时我读取了多个数据包。我需要如何将其更改为只读取一个数据包数据?

c++ - boost - ASIO 与 IOStreams TCP

我是Boost的新手。我一直在为sokcets/网络/TCP东西寻找一个简单的跨平台解决方案,并找到了Boost。快速浏览一下,似乎有两个TCP相关类:一个在Iostreams中,一个在Asio中。我(非常)确定,如果我深入研究这两个库的相应文档,我将能够弄清楚每个库的用途,但是有人可以简短地解释一下区别是什么,或者每个库的用途是什么吗? 最佳答案 Boost.Iostreams中有TCP流吗?ASIO是一个完整的全功能网络库,支持使用通用回调API的异步I/O。ip::tcp::iostream类(它是ASIO的一部分)构建在AS

c++ - boost:asio::async_write:已发送数据但未调用处理程序

我有以下类定义://SocketTypeTmaybee.g.'boost::asio::ip::tcp::socket'templateclassSocket:publicSocketTypeT,publicboost::enable_shared_from_this>{[...]在这个类中,我有以下方法“writeAsync”:voidwriteAsync(conststd::string&strData){boost::asio::async_write(*this,boost::asio::buffer(strData),boost::bind(&Socket::handle_w