代码之家  ›  专栏  ›  技术社区  ›  binW

谁的责任是解放斯库夫

  •  2
  • binW  · 技术社区  · 15 年前

    netlink_kernel_create() 函数指针作为参数传递给此函数,当在该套接字上接收到消息时调用该函数。此回调函数接收 sk_buff

    我的问题是谁的责任是解放这个 ?

    示例代码

    #包括<linux/module.h>

    #包括<linux/netlink.h>

    结构sock*nl\u sk=NULL;

    静态void my\u nl\u recv\u msg(struct sk\u buff*skb){

    struct nlmsghdr *nlh;  
    int pid;  
    
    printk(KERN_INFO "Entering: %s\n", __FUNCTION__);  
    
    nlh=(struct nlmsghdr*)skb->data;  
    printk(KERN_INFO "Netlink received msg payload: %s\n",  
        (char*)NLMSG_DATA(nlh));  
    pid = nlh->nlmsg_pid; /*pid of sending process */  
    NETLINK_CB(skb).dst_group = 0; /* not in mcast group */  
    NETLINK_CB(skb).pid = 0;      /* from kernel */  
    //printk("About to send msg bak:\n");  
    //netlink_unicast(nl_sk,skb,pid,MSG_DONTWAIT);
    

    静态int\uu init hello\u init(void){

    printk("Entering: %s\n",__FUNCTION__);  
    nl_sk=netlink_kernel_create(&init_net, NETLINK_USER, 0,  
            my_nl_recv_msg, NULL, THIS_MODULE);  
    if(!nl_sk)  
    {  
        printk(KERN_ALERT "Error creating socket.\n");  
        return -10;  
    }  
    return 0;
    

    1 回复  |  直到 15 年前
        1
  •  1
  •   user502515    14 年前

    net/netlink/af_netlink.c : netlink_unicast_kernel ,您的 my_nl_recv_msg 函数将负责释放它。