Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13027
  • 博文数量: 3
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-13 09:51
文章分类

全部博文(3)

文章存档

2014年(3)

我的朋友

分类: 其他平台

2014-01-27 19:53:47


因为最近在做SNMP的开发,也就是NMS的开发工作,对SNMP有点心得,希望可以分享自己的经验,达到和大家交流,学习的机会。

1:open snmp

    struct snmp_session session;   
    //snmp会话的初始化工作
    snmp_sess_init(&session);
    //填充结构体session中部分成员变量
    .......
    SOCK_STARTUP;
    snmp_open(&session);

2:发送PDU

    struct snmp_pdu* pdu = NULL;
    struct snmp_pdu* response = NULL;
   
    pdu = snmp_pdu_create(SNMP_MSG_GET);
    snmp_parse_oid(...);
    snmp_add_null_var(...);
    snmp_synch_response(....);

3:解析oid_value

    通过SNMP库定义的SNMP oid_value 的类型,来处理值

4:close SNMP

      (void)snmp_close(session);
      SOCK_CLEANUP;


这个流程相对简单,get_next和set略有差别,但整体一样。
以上结构体和相关API,请查看源码。

在项目后期,我使用Valgrind进行内存检测时,发现严重的内存泄露。
后来分析NET-SNMP库源码,定位出原因:在snmp_open内部维护了一个全局变量(主要是基于效率考虑),导致的内存泄露。

当然 这样的泄露,是有益的 "泄露"。

另外,关于trap(陷阱)的相关开发,会在我接下来的博文中进行记录说明。
阅读(3290) | 评论(0) | 转发(0) |
0

上一篇:利用service name status管理自己开发的程序

下一篇:没有了

给主人留下些什么吧!~~