テスト用のダイアログベースのプロジェクト作って確認してみました。
CAsyncSocketの派生クラスCTestSockを作り、OnSendをオーバーライドして
 CString strCmd = "GET / HTTP/1.0\r\n\r\n";
 Send(strCmd, strCmd.GetLength());
とする。
ダイアログのメンバ変数として
 CTestSock* m_pSock1;
 CTestSock* m_pSock2;
を宣言。これらはダイアログのコンストラクタでNULLで初期化します。
次にダイアログにボタンを二つ作り、一方に
if(m_pSock1 != NULL){
  delete m_pSock1;
  m_pSock1 = NULL;
}
m_pSock1 = new CTestSock;
m_pSock1->Create();
m_pSock1->Connect("www.yahoo.com", 80);
とし、他方に
// 先のm_pSock1をm_pSock2に換えただけ。
if(m_pSock2 != NULL){
  delete m_pSock2;
  m_pSock2 = NULL;
}
m_pSock2 = new CTestSock;
m_pSock2->Create();
m_pSock2->Connect("www.yahoo.com", 80);
とします。
後はボタンを交互に連続で何回か押せばアサートが起きます。