I am about 75% complete with a rewrite of the Windows MPM. Mr.Rowe pointed out that MS does not look kindly to using DuplicateHandle on IOCompletionPorts. What works today may break with the next service pack. Confirmed as much with a call to the MS support org. This has turned out to be a -good- thing. I was tossing about a rewrite to test some ideas and this was just the catalyst to get me going. The new model is -simpler- and from what I can tell so far just as fast as the old model. And we still get graceful restarts. The essence of the change is this: in the old model, I associated all the listening sockets with an IOCompletionPort created in the parent process. (and getting the IOCompletionPort to the child was where DuplicateHandle came in handy). The new model is similar to the Apache 1.3 Windows model. A single accept thread accepts connections off the listening sockets (using AcceptEx) and posts an iocp to a new, child only, completion port on which the worker thread pool is blocked. I manage a queue of iocompletion contexts that are passed from the worker threads when they are finished back to the accept thread where they are reused. I have it all working quite nicely with a single listener. Just need to refine the accept loop to handle multiple listeners, do some testing and I'll be ready to check in some code. Probably next week. Bill
