假定原先已经实现IOCP,并可正常使用,对流程做简单调整,即可实现支持 IPV6
重点是 sockaddr_storage 结构;
地址结构调整:
sockaddr_storage m_sockaddr;
可以对照调用接口名称,对应修改:
1.AcceptEx
if (!AcceptEx(m_pListenSocket->GetSocket(), m_sSocket, m_szBuffRecv, 0, sizeof(sockaddr_storage), sizeof(sockaddr_storage), &dwRecv, &m_olRecv))
//if (!AcceptEx(m_pListenSocket->GetSocket(), m_sSocket, m_szBuffRecv, 0, sizeof(sockaddr_in6) + 16, sizeof(sockaddr_in6) + 16, &dwRecv, &m_olRecv))
{
if (ERROR_IO_PENDING != WSAGetLastError())
{
//
}
}
2.GetAcceptExSockaddrs
GetAcceptExSockaddrs(m_szBuffRecv,
0,
sizeof(sockaddr_storage),
sizeof(sockaddr_storage),
&pLocal,
&nLocal_len,
&pRemote,
&nRemote_len);
CopyMemory(&m_sockaddr, pRemote, nRemote_len);