Hi,
Fairly new to Boost. Bear with me.
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:
Server process:
-Thread 1 (Handle background server operations, etc.)
-helper thread 1
-helper thread 2
...
-helper thread n
-Thread 2 (Listen for incoming connections. When found, make a new connection thread to handle it)
-connection thread 1
-connection thread 2
...
-connection thread n
I began by making heavy use of the example here. Please see my attached files for my implementation. The classes "mMindThreadServerListener" and "mMindServerHandlerClient" correspond to "server" and "session", respectively.
"mMindServer" is the highest level (server process). In it, there's a thread group that contains "Thread 1" ("_thread_connection_pruner", which kills unused connections, and represents a background server operation) and "Thread 2" ("_thread_listener", which listens for incoming connections).
Thread 2's need to make other threads seems to be handled by boost::asio::io_service.
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. Can someone explain what's going on, and possibly a better way to do this?
Thanks,
Ian