
On Mon, 21 May 2007 16:37:28 +0530, Gaurav.Jain@iflexsolutions.com said:
Hi,
I am using boost boost 1.33.1 with asio 0.3.8rc2. I have develop a Multi-threaded server program using pool of io_service. In my design i have pool of io_service object and this pool is controlled by a pool manager, which is running over a seprate io_service. I want to do clean shutdown of the server. In the clean shut down i want to close each connection running over related io_service.
It's worth noting that this is not the only way to do clean shutdown. The new HTTP server examples ("server2" and "server3") also perform a clean shutdown. However, rather than explicitly closing the connections, they simply rely on the fact that the io_service destructor will destroy all handler objects associated with unfinished operations.
What i am doing is, while shutting down the server, pool manager is posting a request to each io_service object to shut it down. Each io_service object in turn posting a request to all the connection it is hosting to stop themselves. The problem i am facing : connection stop method is not getting executed at all for each running connection.
Here is a code snippet of what i am doing : [...] scheduler.stop();
What is scheduler? Is it an io_service? If so, by explicitly stopping it some of your completion handlers will never be called. If you want to use this particular clean shutdown design, it is better to wait for the io_service::run() call to finish automatically once all the outstanding operations have finished. Cheers, Chris