Boost logo

Boost Users :

Subject: Re: [Boost-users] tcp::acceptor works differently on windows than linux.
From: Igor R (boost.lists_at_[hidden])
Date: 2009-03-06 07:38:52

> I'm writting a multiplatform app which uses a tcp::acceptor.
> Thread one does:
>                {
>                    std::cout<<"Oh but I interupted: "<<std::endl;
>                    _myTCPAcceptor->close();
>                    std::cout<<"Done interupting "<<std::endl;
>                }
>                std::cout<<"About to join "<<std::endl;
>                _myAcceptorThread->join();
>                std::cout<<"Join complete"<<std::endl;
> Thread two does:
> {
>            boost::system::error_code ec;
>            boost::asio::socket_base::non_blocking_io command(false);
>            _mySocket.io_control(command,ec);
>            boost::system::error_code ec1;
>            std::cout<<"About to accept "<<std::endl;
>            _myTCPAcceptor->accept(_mySocket,ec1);
>            std::cout<<boost::system::system_error(ec1).what()<<std::endl;
>            std::cout<<"done with the accept"<<std::endl;
> }

According to the reference:
acceptor object is not threadsafe. This means you should not access it
this way, and if you do, the behaviour is undefined.
To cancel acceptor you could use async_accept() and then post close()
to the same thread, using

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at