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,但我不反对升级到一个更新的版本升压。

Canot编译使用boost的odeint的C ++

我在Ubuntu 12.04上,并且已经在/ usr / include中有了一些提升。 我做了一个 sudo apt-get install libboost-all-dev 并且也安装了很多文件。 我不想删除这个提升并从源代码安装,因为其他几个软件包依赖于Ubuntu的版本。 这是我想要运行的示例代码: #include <iostream> #include <boost/numeric/odeint.hpp> using namespace std; using namespace boost::numeric::odeint; typedef vector< double > state_type; const double sigma = 10.0; const double R = 28.0; const double b = 8.0 / 3.0; void lorenz( state_type &x , state_type &dxdt , double t […]

在不使用Epoll的Linux上升级Asio

我的印象是,boost :: asio会默认使用epoll设置,而不是select实现,但是在运行一些testing之后,看起来像我的设置正在使用select。 操作系统:RHEL 4 内核:2.6 GCC:3.4.6 我写了一个小testing程序来validation哪个反应器头被使用,看起来像使用select反应器而不是epoll反应器。 #include <boost/asio.hpp> #include <string> #include <iostream> std::string output; #if defined(BOOST_ASIO_EPOLL_REACTOR_HPP) int main(void) { std::cout << "you have epoll enabled." << std::endl; } #elif defined(BOOST_ASIO_DETAIL_SELECT_REACTOR_HPP) int main(void) { std::cout << "you have select enabled." << std::endl; } #else int main(void) { std::cout << "this shit is confusing." << […]

在testserver上,使用Select()连接的Linux TCP失败

我的问题是:我在Linux中编程接口来通过以太网控制GPIB控制器。 要做到这一点,我打开一个TCP套接字,只是发送命令到控制器。 到目前为止,这工作得很好。 我在为Interface写某种unit testing的时候出现了这个问题:为了检查我在一个单独的线程中使用了一个来自boost lib的tcp接受器,并且连接到它而不是实际的控制器。 这也正在工作,但是只要来自接口的connect()调用被阻塞。 但是,因为我需要connect()调用指定的超时,我必须连接到select()函数: // Open TCP Socket m_Socket = socket(PF_INET,SOCK_STREAM,0); if( m_Socket < 0 ) { m_connectionStatus = STATUS_CLOSED; return ERR_NET_SOCKET; } struct sockaddr_in addr; inet_aton(m_Host.c_str(), &addr.sin_addr); addr.sin_port = htons(m_Port); addr.sin_family = PF_INET; // Set timeout values for socket struct timeval timeouts; timeouts.tv_sec = SOCKET_TIMEOUT_SEC ; // const -> 5 […]

如何在Linux中添加boost库到Code :: Blocks

如何将Boot库添加到Linux Ubuntu的Code :: Blocks项目中。 例如,我想添加regex库。 我已经安装了靴子库: sudo apt-get install libboost-all-dev 完整的例子将how to将是最有价值的。

在unix上加强UDP套接字问题 – bind:已经在使用的地址

首先,我知道在同一主题上还有其他几个主题,但是我无法find那些能够帮助我的东西,所以我会试着对我的情况非常具体。 我已经build立了一个简单的UDP客户端/ UDP服务器对,负责在几个并行模拟之间发送数据。 也就是说,模拟器的每个实例都在一个单独的线程中运行,并在UDP套接字上发送数据。 在主线程中,服务器正在运行,并在模拟之间路由消息。 (对于这个问题)服务器代码的重要部分如下所示: UDPServer::UDPServer(boost::asio::io_service &m_io_service) : m_socket(m_io_service, udp::endpoint(udp::v4(), PORT_NUMBER)), m_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), PORT_NUMBER) { this->start_receive(); }; void UDPServer::start_receive() { // Set SO_REUSABLE to true boost::asio::socket_base::reuse_address option(true); this->m_socket.set_option(option); // Specify what happens when a message is received (it should call the handle_receive function) this->m_socket.async_receive_from( boost::asio::buffer(this->recv_buffer), this->m_endpoint, boost::bind(&UDPServer::handle_receive, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); }; 这在我的Windows工作站上正常工作。 事情是; 我希望能够在linux集群上运行它,这就是为什么我编译它并试图在集群节点上运行它的原因。 代码编译没有一丝困难,但是当我尝试运行它时,我得到的错误 […]

如何使用C ++ Boost库与pkg-config?

我成功编译并安装了最新版本的Boost库到我的linux机器上。 现在,我希望能够使用pkg-config来简化与GCC提供链接参数的过程。 由于我懒得手工编写我自己的.pc文件,是否有一个脚本/工具,会自动生成所需的.pc文件或以其他方式更新pkg-config与升压标志? (如果某人已经拥有该.pc文件,则也欢迎分享。)

Boost.Log在GNU / Linux下链接错误

我想testingBoost.Log库。 不幸的是,我得到链接错误。 我使用Arch Linux,我通过内置的包pipe理器pacman安装了Boost头文件和库: 提升1.54.0-3 boost-libs 1.54.0-2 当从官方网站通过g++ log.cpp -lboost_log -lpthread编译简单示例时,出现以下错误: log.cpp:(.text+0x42): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()' log.cpp:(.text+0x9b): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()' … 我读过为什么我的应用程序无法链接到Boost.Log? ,但我无法解决链接错误。 它只给了我提示, boost::log::v2s_mt_posix::trivial::logger::get()所在的库是静态链接的。 但是在/usr/lib/目录下,只有dynamic连接的扩展名为.so Boost库。 也许,有人知道这里有什么问题。 谢谢。

在类中使用静态互斥

我有一个class,我可以有很多的实例。 它内部创build并初始化一些来自第三方库(使用一些全局variables)的成员,并且不是线程安全的。 我想过使用静态boost :: mutex,这将被locking在我的类的构造函数和析构函数。 因此,在我的线程中创build和销毁实例对于第三方成员来说是安全的。 class MyClass { static boost::mutex mx; // 3rd party library members public: MyClass(); ~MyClass(); }; MyClass::MyClass() { boost::mutex::scoped_lock scoped_lock(mx); // create and init 3rd party library stuff } MyClass::~MyClass() { boost::mutex::scoped_lock scoped_lock(mx); // destroy 3rd party library stuff } 我无法链接,因为我收到错误: undefined reference to `MyClass::mx` 我是否需要这种静态成员的特殊初始化? 使用静态互斥锁有什么错误吗? 编辑:链接问题是正确的定义在CPP boost::mutex MyClass::mx;