If you want to absolutely terminate your server you can call exit. One possible strategy I can think of is that when your server is told to shutdown, you spawn a thread which will call exit in, say, 20 seconds. After communicator->waitForShutdown() returns you terminate this thread. If waitForShutdown() does not return, then your server is hanging and the spawned thread will take care of destroying the server for you.
Note that if you do this you run the risk of losing data -- which is why Ice does not do this
