Boost Users :
Subject: Re: [Boost-users] Why does async_connect() call listen()?
From: Nathaniel Fries (nfries88_at_[hidden])
Date: 2014-06-12 19:19:07
I don't see why it is necessary in this case, since the calling thread is
not doing work that needs to be interrupted in case of calling
On Tue, May 20, 2014 at 9:49 PM, Soren Dreijer <dreijer+list_at_[hidden]>
> Thanks for the clarification Niklas. I'll have to dig deeper and figure
> out what's blocking the listen() call on these machines.
> On Tue, May 20, 2014 at 2:34 PM, Niklas Angare <li51ckf02_at_[hidden]>
>> "Soren Dreijer" <dreijer_at_[hidden]> wrote:
>>> By coincidence, I ended up looking at a stack trace where my application
>>> calls async_connect() on a asio::ip::tcp::socket. Two things took me by
>>> 1. Asio calls listen() under the hood. Why does it do that when I'm just
>>> trying to make an outbound TCP connection?
>> The call is made by the class socket_select_interrupter. The socket it is
>> calling listen() on is an internal one bound to 127.0.0.1. If a firewall
>> interferes with that then the firewall is horribly bugged. I believe the
>> socket is set up so that a thread that is blocking on a call to ::select()
>> (for example in io_service::run()), can be interrupted from another thread.
>> This interruption is probably used when io_service::stop() is called for
>> 2. If the listen() call above is indeed required, why does it happen on
>>> the same thread where I call async_connect()? I thought the point of the
>>> method was to defer the work to the reactor?
>> It only has to defer work that would block or that the documentation
>> explicitly promises it will defer.
>> Niklas Angare
>> Boost-users mailing list
> Boost-users mailing list
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net