On Sun, Apr 10, 2011 at 1:43 PM, Igor R <boost.lists@gmail.com> wrote:
> I'm trying to write a multithreaded multithreaded server (two multithreaded
> operations): ideally, there should be a single process, containing at least
> two threads.  The first thread handles various tasks (and can start other
> threads to help it as well).  The other thread waits for incoming
> connections, and adds a new thread for each one:

So, for 1000 connection you end up with 1000 threads, don't you?
Basically.  There'd be thread 1 (the server background operations thread), plus any helpers it had (say 0).  Then, there'd be thread 2 (listener) and then 1000 connection threads, for a total of (1+0)+(1+1000) = 1002 threads.
> Unfortunately, when a connection is found, Thread 1 stops.  I can only
> attribute this to a lock boost::asio::io_service puts, although I have no idea.

io_service::run() blocks the thread. You can think of it like a
"message loop" -- it runs as long as io_service has completion
handlers to dispatch.
Right, but I wouldn't expect it to block other threads (i.e., thread 1).  Thread 2 should block, running in its own little thing, but thread 1 should keep running, right?  Or does io_service::run() block all threads in the process?

Thanks,
Ian