Articles of 升压

如何使用具有Boost Asio套接字的特定networking接口/ Ip?

我有一个Debian / Linux服务器有几个IP地址,全部分配到同一个物理网卡。 /etc/network/interfacesconfiguration文件看起来像这样(xx代表数字) auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 176.xx.xx.144 netmask 255.255.255.0 network 176.xx.xx.0 broadcast 176.xx.xx.255 gateway 176.xx.xx.254 auto eth0:0 allow-hotplug eth0:0 iface eth0:0 inet static address 46.xx.xx.57 netmask 255.255.255.255 broadcast 46.xx.xx.57 auto eth0:1 allow-hotplug eth0:1 iface eth0:1 inet static address 94.xx.xx.166 netmask 255.255.255.255 broadcast 94.xx.xx.166 //IPv6 […]

Boost.Asio的可扩展性

我很好奇其他人推动Boost.Asio在可扩展性方面有多远。 我正在编写一个应用程序,可能会使用接近1000个套接字对象,一些接受器对象和许多计时器对象。 我已经configuration了它,以便有一个线程池调用io_service::run并在适当的地方使用strand s,以确保我的处理程序不会彼此跺脚。 我的平台是红帽企业Linux与升压1.39,但我不反对升级到一个更新的版本升压。

链接错误“未定义的参考”在编译期间关于boost静态库

我想用boost库1.57来编译Linux x64上的C ++项目。 这个项目是用scons编译的,我在Arch Linux上成功编译了,但是这次在Ubuntu机器上失败了。 我添加了-lboost_coroutine标志进行链接,但错误“未定义的引用”仍然存在。 /usr/bin/g++ -o build/gcc.release/app -pthread -g build/gcc.release/src/han/unity/rpcx.o -lpthread -lz -lboost_coroutine -lboost_context -lboost_date_time build/gcc.release/src/han/unity/rpcx.o: In function `attributes': /usr/local/include/boost/coroutine/attributes.hpp:31: undefined reference to `boost::coroutines::stack_traits::default_size()' 我注意到属性.hpp恰好是boost协程头文件之一。 我试图用nm来提升协程库,似乎没有问题。 nm /usr/local/lib/libboost_coroutine.a | grep "default_size" 0000000000000170 T _ZN5boost10coroutines12stack_traits12default_sizeEv 我search了这个错误的可能原因,大部分是关于链接器标志的顺序。 在这种情况下,rpcx.o取决于boost_coroutine,所以这出现在前面。 还有什么可能的原因?

C ++ Boost ASIO简单周期性定时器?

我想要一个非常简单的周期性定时器,每50ms调用一次我的代码。 我可以创build一个睡眠时间为50ms的线程(但是这很痛苦)…我可以开始研究Linux API来制作计时器(但它不是可移植的)… 我想使用提升..我只是不知道这是可能的。 增强提供这个function吗?

Linux上的boost和ssl客户端服务器构build问题

当我安装pcl(点云库)时,我已经安装了boost作为第三个库。 现在我试图运行客户端和服务器程序http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/example/cpp03/ssl/client.cpp 当试图链接所需的库时: g++ -I /usr/include/boost/ server.cpp -o server -lboost_system -lssl -lpthread 出现以下错误: / usr / bin / ld:/tmp/ccRbD849.o:未定义引用符号'ERR_reason_error_string @@ OPENSSL_1.0.0'//lib/x86_64-linux-gnu/libcrypto.so.1.0.0:添加符号错误:DSO缺失从命令行collect2:错误:ld返回1退出状态 当我searchusr文件夹时,Boost文件夹只存在于子文件夹内。 我能做些什么来解决这个问题。

加强静态链接

我正在使用Linux中的Boost库,GCC。 在安装和构buildBoost之后,我发现使用Regex和Thread的程序使用共享的Boost库。 为了我的目的,我需要静态链接。 我怎样才能改变链接types? 我应该重buildBoost,还是我可以通过在自己的项目中定义一些常量或Boostconfiguration文件来设置链接types?

如何在Windows中使用boost asioasynchronous读取命令行input?

我发现这个问题 ,询问如何asynchronous读取input,但只能使用POSIXstream描述符,这将不会在Windows上工作。 所以,我发现这个教程显示,而不是使用POSIXstream描述符,我可以使用boost::asio::windows::stream_handle 。 在这两个例子之后,我提出了下面的代码。 当我运行它时,我不能在命令提示符下键入任何内容,因为程序立即终止。 我希望它捕获来自用户的任何input,可能是一个std::string ,同时允许我的程序中的其他逻辑执行(即从Windows控制台执行asynchronousI / O)。 从本质上讲,我试图避免阻止我的程序,当它试图从stdin读取。 我不知道这是否可能在Windows中,因为我也发现这个post ,详细说明另一个用户在尝试做同样的事情时遇到的问题。 #define _WIN32_WINNT 0x0501 #define INPUT_BUFFER_LENGTH 512 #include <cstdio> #include <iostream> #define BOOST_THREAD_USE_LIB // For MinGW 4.5 – (https://svn.boost.org/trac/boost/ticket/4878) #include <boost/bind.hpp> #include <boost/asio.hpp> class Example { public: Example( boost::asio::io_service& io_service) : input_buffer( INPUT_BUFFER_LENGTH), input_handle( io_service) { // Read a line of input. boost::asio::async_read_until( […]

SO_RCVTIME和SO_RCVTIMEO不影响Boost.Asio操作

以下是我的代码 boost::asio::io_service io; boost::asio::ip::tcp::acceptor::reuse_address option(true); boost::asio::ip::tcp::acceptor accept(io); boost::asio::ip::tcp::resolver resolver(io); boost::asio::ip::tcp::resolver::query query("0.0.0.0", "8080"); boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query); accept.open(endpoint.protocol()); accept.set_option(option); accept.bind(endpoint); accept.listen(30); boost::asio::ip::tcp::socket ps(io); accept.accept(ps); struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; //setsockopt(ps.native(), SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); setsockopt(ps.native(), SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); char buf[1024]; ps.async_receive(boost::asio::buffer(buf, 1024), boost::bind(fun)); io.run(); 当我使用Telnet连接但不发送数据时,它不会从Telnet超时断开连接。将需要做什么使setsockopt踢? 谢谢! 我已经将SO_RCVTIMEO修改为SO_SNDTIMEO。 仍然无法在指定的时间超时