I have a client / server application that needs to handle many short-lived connections, and I used a background thread to always keep the number unused BeginAccept calls equal to a configurable value. This worked great in .Net 1.1, but does not work in .Net 2.0. In 2.0, only the first connection is accepted and the accept callback is called to handle this connection. The accept callback is not called for subsequent connections. The client socket shows that it is connected, but the server's accept callback is not called. When the client sends data it hangs. When I shutdown the server, the accept callback gets called for all the outstanding calls to BeginAccept. I was able to get 2.0 to work in a serialized manner by only calling BeginAccept once when starting, and then calling it again within the Accept Callback, but I'd rather not have to serialize the process of accepting client connections. Any ideas on how to get away from serializing this process in 2.0?