头文件:
CPP:
typedef struct taghqNetAddrInfo
{
DWORD dwIndex;
DWORD dwAddr;
DWORD dwMask;
DWORD dwBCast;
DWORD dwCalcBCast;
}ThqNetAddrInfo;
int GetNetAddrInfoBySocket(SOCKET sock,std::vector<ThqNetAddrInfo>& vtInfo);
CPP:
int GetNetAddrInfoBySocket(SOCKET sock,std::vector<ThqNetAddrInfo>& vtInfo)
{
INTERFACE_INFO InterfaceList[20];
unsigned long nBytesReturned;
if (WSAIoctl(sock, SIO_GET_INTERFACE_LIST, 0, 0, &InterfaceList,
sizeof(InterfaceList), &nBytesReturned, 0, 0) == SOCKET_ERROR) {
cerr << "Failed calling WSAIoctl: error " << WSAGetLastError() <<
endl;
return 1;
}
int nNumInterfaces = nBytesReturned / sizeof(INTERFACE_INFO);
ThqNetAddrInfo dwInfo;
for (int i = 0; i < nNumInterfaces; ++i) {
dwInfo.dwIndex = i;
dwInfo.dwAddr = InterfaceList[i].iiAddress.AddressIn.sin_addr.s_addr;
dwInfo.dwMask = InterfaceList[i].iiNetmask.AddressIn.sin_addr.s_addr;
dwInfo.dwBCast = InterfaceList[i].iiBroadcastAddress.AddressIn.sin_addr.s_addr;
dwInfo.dwCalcBCast = dwInfo.dwAddr&dwInfo.dwMask|~dwInfo.dwMask;
vtInfo.push_back(dwInfo);
}
return nNumInterfaces;
}