获取本机网卡绑定的IPv4地址。
int GetLoalIP(vector<char*>& local_addr){ int ret = ErrorCode::Success; local_addr.clear(); ifaddrs* ifap; if(getifaddrs(&ifap) == -1){ return ErrorCode::SystemRetrieveLocalIPError; } ifaddrs* p = ifap; while(p != NULL){ sockaddr* addr = p->ifa_addr; // retrieve ipv4 addr if(addr->sa_family == AF_INET){ in_addr* inaddr = &((sockaddr_in*)addr)->sin_addr; char buf[16]; memset(buf, 0, sizeof(buf)); if((inet_ntop(addr->sa_family, inaddr, buf, sizeof(buf))) == NULL){ Fatal("convert local ip failed, errno=%d(%#x)", errno, errno); ret = ErrorCode::SystemRetrieveLocalIPError; break; } int size = strlen(buf); char* heap_buf = new char[size + 1]; memcpy(heap_buf, buf, size + 1); local_addr.push_back(heap_buf); } p = p->ifa_next; } freeifaddrs(ifap); if(ret != ErrorCode::Success){ return ret; } if(local_addr.size() == 0){ return ErrorCode::SystemRetrieveLocalIPError; } Trace("retrieve local ip success!"); return ret; }