CAsyncSocket crashes my application if I delete the CAsyncSocket after a call to Connect, but before the OnConnect callback has been called. ASSERT(pSocket != NULL) fails in CAsyncSocket::DoCallBack and the application exits.
In other words, if I create a CAsyncSocket, try to connect it to a server, and then kill it before that connection either succeeds or fails, I have problems. I can avoid this particular crash by implementing OnConnect and setting a flag which indicates that the connection attempt completed. If the flag is false I know it's not safe to delete.
Are there other cases I need to check for before I delete the object? Is there a single way to check if it's safe? Or do I need to implement all of the callbacks for any operation I might initiate (OnReceive, OnSend, OnConnect ) and ensure those callbacks have been called?