Socket编程,以前在IPv4下运行没有关问题,现在机器是IPv6下运行不了,请教如何修改既能支持IPv4又支持IPv6

Socket编程,以前在IPv4上运行没问题,现在机器是IPv6上运行不了,请问怎么修改既能支持IPv4又支持IPv6?
#pragma once
#include "afxsock.h"

class CServerConnectSoc :public CAsyncSocket
{
public:
CServerConnectSoc(void);
~CServerConnectSoc(void);
public:
CCriticalSection* m_pCriticalSection;
CGtpDataServerDlg * thisDlg;
CWinThread* m_pThread;
HANDLE hConnectClose;      //连接关闭信号量
HANDLE hExitedWorkThread;  //指示已经成功关闭工作线程
HANDLE hReceiveFinished;   //指示完成了数据接收工作,否则,不能退出线程
BOOL bIsReceiving;         //指示是否在接收数据,如果是  则主线程需要等待 
CWinThread* m_CheckThead;  //数据读取 命令发送等工作 线程
DWORD m_nThreadID;         //工作线程ID 用户与主线程通讯联络使用
int Index    ;             //在Array结构数组中的下标 该下标在初始化时就确定了 不再改变 用来提高访问效率
CString FILEN;
DWORD GetTimes;
BOOL m_fConnected;         //Socket连接状态

TCHAR m_sendBuff[MAX_BUFF+4];
int m_nSendDataLen;
int m_nBytesSent;
TCHAR m_recvBuff[MAX_BUFF+4];
int m_nRecvDataLen;
int m_nBytesRecv;
BOOL m_bReadDataLength;
void AsyncSendBuff(void* lpBuf, int nBufLen);


// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CConnectSoc)
public:
virtual void OnClose(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnSend(int nErrorCode);
virtual int Receive(void* lpBuf, int nBufLen, int nFlags = 0);
virtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0);
protected:
void DoAsyncSendBuff();
};



#include "StdAfx.h"
#include "GtpDataServer.h"
#include "ServerConnect.h"

/////////////////////////////////////////////////////////////////////////////
// CConnectSoc
//该线程负责启动巡检 发送命令超时等控制
UINT  ServerCheckDataThread(LPVOID pParam)
{
CString str;
DWORD dwRes;
HANDLE hArray[2];
CServerConnectSoc * thisSoc = (CServerConnectSoc *)pParam;
str.Format(L"%x",thisSoc->m_nThreadID);
hArray[0] = thisSoc->hConnectClose;
do 
{
//启动轮询  判断超时,如果连续N次超时,则关闭该连接 
dwRes = WaitForMultipleObjects(1,hArray,FALSE,5);//等待指定事件发生
switch(dwRes)
{
case WAIT_OBJECT_0:
SetEvent(thisSoc->hExitedWorkThread);
thisSoc->m_CheckThead=NULL;
return 0;
break;
case WAIT_TIMEOUT://超时
//记录读取事件或超时事件的时间   已备读取函数判断来了数据包后没有
break;   
                    
//超时完毕

default:
//错误 报告错误
break;
}
}
while(1);
SetEvent(thisSoc->hExitedWorkThread);
thisSoc->m_CheckThead=NULL;
return 0;
}

//当创建该类时  已经就成功连接上,直接打开工作线程即可
CServerConnectSoc::CServerConnectSoc(void)
{
bIsReceiving=FALSE;
GetTimes=0;
m_nBytesSent = m_nSendDataLen = 0;
m_nRecvDataLen = sizeof(int); // initialize for 4 byte data length