링크 ux c 이 컴퓨터 네트워크 카드 ip 주소 가 져 오기

1391 단어 clinuxnull
이 컴퓨터 네트워크 카드 에 연 결 된 IPv 4 주 소 를 가 져 옵 니 다.
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;
}

좋은 웹페이지 즐겨찾기