草庐IT

asio-acceptor

全部标签

c++ - Boost asio::deadline_timer 在超时前重置

我正在使用boost::asio::deadline_timer添加套接字超时选项。我已经实现了异步HTTP读取,当我开始与服务器连接时我启动了deadline_timer,并且在每次回调时我用函数deadline_timer::expires_from_now重置了deadline_timer。在deadline_timer的错误处理程序中,我清楚地检查超时是实际超时还是operation_aborted。但几乎总是在预期超时之前收到实际超时。请看看我给定的代码。我不明白在每次回调中我都在重置计时器,然后为什么会收到此超时错误。#defineTCP_SOCKET_TIMEOUT10H

c++ - asio::tcp::socket 的async_read_some 和async_receive 有什么区别?

有什么区别:boost::asio::tcp::socket::async_read_some()boost::asio::tcp::socket::async_receive()据我所知,他们的文档是相同的。我应该选择哪个? 最佳答案 我认为两者本质上是相同的。它们同时提供两者的原因是提供类似于iostream(具有read_some成员)和套接字(具有receive)的接口(interface)。正如PeterTseng指出的那样,async_receive也有一个接受socket_base::message_flags的重载,

c++ - boost::asio::ip::tcp::acceptor 如何与 TCP_DEFER_ACCEPT 和 TCP_FASTOPEN 一起工作

boost::asio::ip::tcp::acceptor如何与TCP_DEFER_ACCEPT和TCP_FASTOPEN一起工作,当我使用纯C时,我可以设置一些参数,如TCP_DEFER_ACCEPT和TCP_FASTOPEN,以boosttcp/ip性能,如下所示:setsockopt(serverSock,IPPROTO_TCP,TCP_DEFER_ACCEPT,&soValue,sizeof(soValue));setsockopt(serverSock,SOL_TCP,TCP_FASTOPEN,&qlen,sizeof(qlen));但是当我使用boost::asio时,我

java - Boost Asio io_service,从客户端读取消息

我正在尝试使用BoostASio库在C++中创建一个简单的Tcp服务器。我写了两个类TcpConnection和TcpServer。我需要的行为是Tcp服务器应该能够向所有连接的客户端发送消息,并且客户端应该能够向服务器注册/注销。我能够实现从服务器发送消息。我没有成功阅读来自客户的部分。我的客户端是用java编写的,使用的是apachemina。服务器代码message=message+"\r\n";constintbytesToSend=message.length();boost::system::error_codeerror;boost::asio::write(socket

c++ - boost asio多线程

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Boost.Asiothreadsafety是boost::asio::ip::tcp::socket线程安全吗?我的意思是,我可以从不同线程调用共享tcp::socket(socket.connect()、read_some()、close())的方法而不用担心竞争条件问题吗?

c++ - Asio 中新连接出现 "Already Open"错误

我正在使用Asio的非Boost版本,并根据http://think-async.com/Asio/asio-1.11.0/doc/asio/tutorial/tutdaytime3.html中的代码创建了一个TCP服务器。我可以很好地建立与服务器的连接,但只是第一次。如果我断开我的客户端然后尝试再次连接,Asio将“已经打开”错误传递给我的接受处理程序。从代码中可以看出,在接受连接之前,会创建一个tcp_connection类的新实例。我不确定为什么会收到此错误,即使它是一个完全独立的实例,其套接字不应已打开。任何帮助将不胜感激。提前致谢。编辑:这是服务器类:http://paste

c++ - Boost::ASIO:使用两个进程的双向通信

我想制作两个具有以下行为的应用程序(两个linux进程):将打开一个TCP服务器(在特定端口上),并且只会读取将由连接的客户端发送的数据。一个将向所有连接的客户端发送数据。如果我使用线程(我只会共享asiotcp::socket对象),这会很容易,但由于某些原因我不能使用线程。如何使用两个不同的应用程序实现这一点?(没有某些形式的IPC)。 最佳答案 您甚至不需要两个进程,您可以将async_writes和async_reads发布到同一个消息循环,它们将得到处理。当然不是严格意义上的并行,但是如果您的环境限制使用线程(为什么?),

c++ - boost::asio 和使用异步的多个客户端连接

我需要与不同的服务器建立最多三个不同的TCP连接。所有三个连接都需要不同的协议(protocol)、不同的握手和不同的心跳。在读http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/example/cpp11/chat/chat_client.cpp,在这里阅读内容并遵循ChrisKohlhoffs的建议,我尝试按如下方式实现它。问题是,对于这种架构,无论我在做什么,在doConnect()中调用shared_from_this()时都会出现bad_weak_pointer异常。重要这些只是未运行代码的片段,其中可能包含错误!

tcp - 发送 TCP 数据而不接收(boost asio)

我正在学习boost的asio教程。我正在调查他们的chatexample.更具体地说,我试图拆分他们的chatclient从一个发送者+接收者,到一个发送者和一个接收者,但我看到了一些我无法解释的行为。设置包括:boost::asio::io_serviceio_service;tcp::resolver::iteratorendpoint=resolver.resolve(...);boost::threadt(boost::bind(&boost::asio::io_service::run,&io_service));boost::asio::async_connect(soc

c++ - 创建指针以 boost asio tcp 套接字

我想做什么我正在开发一个通过TCP连接到硬件的库。该库提供了一些用于在远程硬件上设置参数的函数。为了使这个库易于使用,我希望连接函数创建一个连接状态struct/对象,一个指向该对象的指针将由使用此类的软件调用保存。这样它就可以一次连接到多个目标,并让每个连接的句柄传递给库的其他函数。相关源码如下:#include#includeusingboost::asio::ip::tcp;structconnection_state{boost::asio::io_service*io_service;tcp::socket*socket;boolconnected=false;};__std