资源简介

解决Android下getifaddrs和freeifaddrs undefined reference 的问题,即android下的c实现

资源截图

代码片段和文件信息

/*
Copyright (c) 2013 Kenneth MacKay
All rights reserved.

Redistribution and use in source and binary forms with or without modification
are permitted provided that the following conditions are met:
 * Redistributions of source code must retain the above copyright notice this
   list of conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS“ AND
ANY EXPRESS OR IMPLIED WARRANTIES INCLUDING BUT NOT LIMITED TO THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT INDIRECT INCIDENTAL SPECIAL EXEMPLARY OR CONSEQUENTIAL DAMAGES
(INCLUDING BUT NOT LIMITED TO PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE DATA OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY WHETHER IN CONTRACT STRICT LIABILITY OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include “ifaddrs.h“

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include nk.h>
#include nk.h>

typedef struct NetlinkList
{
    struct NetlinkList *m_next;
    struct nlmsghdr *m_data;
    unsigned int m_size;
} NetlinkList;

static int netlink_socket(void)
{
    int l_socket = socket(PF_NETlink SOCK_RAW NETlink_ROUTE);
    if(l_socket < 0)
    {
        return -1;
    }
    
    struct sockaddr_nl l_addr;
    memset(&l_addr 0 sizeof(l_addr));
    l_addr.nl_family = AF_NETlink;
    if(bind(l_socket (struct sockaddr *)&l_addr sizeof(l_addr)) < 0)
    {
        close(l_socket);
        return -1;
    }
    
    return l_socket;
}

static int netlink_send(int p_socket int p_request)
{
    char l_buffer[NLMSG_ALIGN(sizeof(struct nlmsghdr)) + NLMSG_ALIGN(sizeof(struct rtgenmsg))];
    memset(l_buffer 0 sizeof(l_buffer));
    struct nlmsghdr *l_hdr = (struct nlmsghdr *)l_buffer;
    struct rtgenmsg *l_msg = (struct rtgenmsg *)NLMSG_DATA(l_hdr);
    
    l_hdr->nlmsg_len = NLMSG_LENGTH(sizeof(*l_msg));
    l_hdr->nlmsg_type = p_request;
    l_hdr->nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST;
    l_hdr->nlmsg_pid = 0;
    l_hdr->nlmsg_seq = p_socket;
    l_msg->rtgen_family = AF_UNSPEC;
    
    struct sockaddr_nl l_addr;
    memset(&l_addr 0 sizeof(l_addr));
    l_addr.nl_family = AF_NETlink;
    return (sendto(p_socket l_hdr l_hdr->nlmsg_len 0 (struct sockaddr *)&l_addr sizeof(l_addr)));
}

static int netlink_recv(int p_socket void *p_buffer size_t p_len)
{
    struct msghdr l_msg;
    struct iovec l_iov = { p

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-07-06 03:19  android-ifaddrs-master\
     文件         235  2013-07-06 03:19  android-ifaddrs-master\README.md
     文件       18711  2013-07-06 03:19  android-ifaddrs-master\ifaddrs.c
     文件        1853  2013-07-06 03:19  android-ifaddrs-master\ifaddrs.h

评论

共有 条评论