jjzjj

c++ - boost::asio::deadline_timer 没有唤醒(压力场景)

我正在使用deadline_timer作为异步事件,我遇到了这样一种情况,一段时间后,等待该事件的线程似乎永远不会被唤醒(尽管对cancel()的调用更多)。我已经能够使用我在下面粘贴的一些示例代码来重现它;它并不完全一致,但我已经看到我认为与我遇到的问题相同。boost::asio::io_serviceio_service;boost::asio::deadline_timertimer(io_service);timer.expires_at(boost::posix_time::pos_infin);intnum_events=0;autowaiter=[&timer,&num

c++ - Boost.asio 和异步链,unique_ptr?

我对异步编程不是很熟悉,我有一个问题。我的问题如下。给定boost.asio中C++11的echo_server示例:http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/example/cpp11/spawn/echo_server.cpp我想知道std::make_shared可以在C++14中替换为std::unique_ptr在C++14中,避免了引用计数的开销。我不确定,因为我们有shared_from_this()但不是像unique_from_this()这样的东西,那么我怎样才能访问unique_ptr从里面t

c++ - 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error>>

我创建了客户端应用程序。当我发送单个消息clientsever时它工作正常。但是当我出于性能目的发送大量消息时,客户端会以两种不同的方式崩溃:(gdb)runStartingprogram:/home/x64joxer/workerGenerators/Worker2/worker-t-i192.168.0.6-p6000-d5-l//home/x64joxer/workerGenerators/Worker2/[Threaddebuggingusinglibthread_dbenabled]Usinghostlibthread_dblibrary"/lib/x86_64-linux-

c++ - 简单的客户端/服务器,TCP/IP 加密消息流,SSL (C++)

基本上我的问题与这个完全相同:Simpleclient/server,TCP/IPencryptingthemessagestream,SSL不同之处在于我需要它用于纯C++,而不是.NET。我不能使用第3方库,所以除非它是一个Windows系统组件(如上),否则我需要一些带有源代码的东西,这样我就可以得到一般的想法并自己构建它。谢谢:)引用另一个问题供引用:"WritingalittleTCP/IPclientserverapp.Basicallyitcreatesaserver,andthenyoucancreateseveraldifferentclientsandsetupab

c++ - Boost::asio 套接字 - 如何干净地断开它们?

我正在为我的服务器应用程序使用boost异步套接字。我创建了一个调用boost的close()的disconnect()函数,然后删除套接字(操作符删除)。当从其中一个异步调用该函数时没关系。处理程序,但是当我从我的主代码库内部调用它时,整个应用程序在其中一个异步处理程序处崩溃。如何在boost中很好地关闭一个socket? 最佳答案 确保只要可能使用它的处理程序存在,该对象就一直存在。很可能在您调用close之后调用了使用此套接字的处理程序之一(因为它向处理程序报告错误)然后访问死指针...通常,使用boost::shared_p

c++ - boost::asio::streambuf 断言 "iterator out of bounds"

客户端向服务器发送大约165kB的数据。起初一切都很好。但是当客户端再次发送相同的数据(165kB)时,我在服务器端收到一个断言。断言包含有关“迭代器越界”的信息在调用堆栈上,有一些关于read_until方法的信息。所以我认为我犯了一个错误。TCP异步服务器代码如下:handle_read代码:voidSession::handle_read(constboost::system::error_code&a_error,size_ta_nbytestransferred){if(!a_error){std::ostringstreamdataToRetrive;dataToRetri

c++ - Boost::asio socket - 如何在 'throw' 中创建 read_some "timeout"?

所以通常我们会做这样的事情socket.read_some(boost::asio::buffer(buffer,buffer_size));但是如何让它在读取还没有开始的情况下抛出异常比说333秒更长的时间? 最佳答案 您应该考虑使用async_read_some而不是read_some,因为它允许您在读取的同时启动一个新的后台计时器。然后,为您执行的每个新套接字创建一个新计时器:boost::asio::io_serviceio_service;time_t_timertimer(io_service);timer.expire

c++ - 如何读取 Boost ASIO streambuf?

有没有办法在不删除字节的情况下从streambuf中读取?我正在从缓冲区读取“消息大小”字段以检查是否收到了整条消息。如果不是,我将发布另一个异步读取以获取它,但处理程序无法知道消息应该有多长-因为大小字段已被删除。感谢任何帮助!例如boost::asio::streambuf_buffer;voidonReceive(constboost::system::error_code&e,std::size_tbytesTransferred){if(e)return;if(_buffer.size()>0){//Partialmessagewaspreviouslyreceived,bu

c++ - Boost Asio - 使用 shared_ptr 处理解析器和套接字

我有一个类能够通过TCP发送消息。这里是简化的界面:classCommandScreenshot:publicCameraCommand{public:CommandScreenshot();~CommandScreenshot();voidDispatch(boost::shared_ptrio_service);private:voidresolve_handler(constboost::system::error_code&err,boost::asio::ip::tcp::resolver::iteratorendpoint_iterator);};如您所见,我有一个函数Di

c++ - boost-asio 错误消息使用的编码是什么?

我正在使用boost-asio,我想正确处理错误消息。在这个例子中,我打错了字(1278而不是127):boost::system::error_codeec;autoaddress=boost::asio::ip::address::from_string("1278.0.0.1",ec);if(ec){autotext=ec.message();//DoSomethingwithtextbutwhatisitsencoding?}我收到一条错误消息,它似乎是在Windows1252中编码的(我使用的是Windows7)。所以看起来编码是操作系统编码。但是,我找不到任何说明这一事实的