gpt4 book ai didi

c++ - 停止后 boost asio 套接字无法连接

转载 作者:行者123 更新时间:2023-11-28 08:04:42 24 4
gpt4 key购买 nike

我使用 boost asio 来实现 TCP 套接字。我遵循了聊天服务器示例。我第一次运行套接字服务器时它工作正常。我是这样做的:

     void ActiveSocketServer::run() throw (ActiveException){

initBoost();

server->startAccept();

t=new boost::thread(boost::bind(&boost::asio::io_service::run, &io_service));
}

void ActiveSocketServer::initBoost(){

if (isIpV6){
endpoint=new tcp::endpoint(tcp::v6(), port);
}else{
endpoint=new tcp::endpoint(tcp::v4(), port);
}
server=new ActiveSocketServerConnection(io_service,
*endpoint,
port,
id,
maxSizePacket,
this);

启动后,我调用停止方法,写成这样:

 void ActiveSocketServer::stop(){
io_service.stop();
if (t){
t->join();
delete t;
t=NULL;
}

if (endpoint){
delete endpoint;
endpoint=NULL;
}

if (server){
delete server;
server=NULL;
}
}

在此之后,端口不可用(netstat 不显示)。稍后,我尝试再次调用 run 并抛出任何错误,端口已打开(我可以通过 netstat 看到)但所有连接都被接受(async_accept 永远不会醒来)。

我认为这可能与 io_service 有关,但如果在停止方法中进行重置,则会抛出错误 125(操作已取消)。

有什么想法吗?


是的,在我调用 startAccept 的同时,我收到了一个新连接,但出现错误 125。这是正常的吗?我在哪里可以阅读有关它的内容?

我的 startAccept:

   void ActiveSocketServerConnection::startAccept(){

sessionId++;

newSession=new ActiveSocketServerSession( io_service_,
getPort(),
getId(),
maxSizePacket,
activeSocketServer,
sessionId);

acceptor_.async_accept( newSession->socket(),
boost::bind(&ActiveSocketServerConnection::handleAccept,
this, newSession,
boost::asio::placeholders::error));
}

句柄接受:

   void ActiveSocketServerConnection::handleAccept(ActiveSocketServerSession* newSession,
const boost::system::error_code& error){
if (!error){
newSession->start();

}else{

activeSocketServer.onException(error);
}

最佳答案

the documentation它声明任何对 run (或类似的)的调用将立即返回,直到 io_service::reset()被称为。

如果您打算再次调用 run,那么我认为像这样“启动”io_service 没有任何危害:

void ActiveSocketServer::stop(){
     io_service.stop();

// prime to make ready for future run/run_one/poll/poll_one calls
io_service.reset();
     
// ...
   }

关于c++ - 停止后 boost asio 套接字无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10520849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com