snmp源结构分析
在应用程序代码中 #include<net-snmp-includes.h>
#include<net-snmp/net-snmp-config.h>
net-snmp-config.h主要定义了各种配置的宏,以下是net-snmp-includes.h的结构图
黄色星星:函数说明
1、int netsnmp_daemonize(intquit_immediately, int stderr_log);(system.h)
将程序变为守护进程,将会fork子进程并调用setsid().
未改变工作目录和关闭文件描述符
2、 netsnmp_session *snmp_open(netsnmp_session*);
根据用户提供的会话信息建立snmp会话,打开并绑定必要的UDP端口。将会返回被创建会话的句柄(不同于传递给snmp_open的指针变量)无论出现何种错误,都返回NULL,并且创建snmp_errno错误码。
3、int snmp_close(netsnmp_session *);
int snmp_close_sessions(void);
关闭参数描述的会话。释放被该回话分配的数据,重排在队列中所有未决(未处理的)请求,并关闭所有该回话打开的套接字。出错返回0,否则返回1.
4、intsnmp_send(netsnmp_session *, netsnmp_pdu *);
在调用snmp_build创建一个连续的数据包之后发送输入消息报文。如果有必要,根据会话默认值设置PDU的某些字段。并在该会话的请求列表上添加一与该PDU相对应的请求,然后发送消息。返回请求ID或1,出错返回0.消息报文会被该函数释放,除非发生错误。
5、int snmp_async_send(netsnmp_session*, netsnmp_pdu *,
netsnmp_callback, void *);
异步发送
6、void snmp_read(fd_set*);
查看是否参数所描述的文件描述符集中的所有文件描述符都属于snmp。每一个带有各自 文件描述符的套接字都会得到一个数据包,当收到数据包时会调用snmp_parse。处理过 的PDU将会发送给
snmp_read2()和snmp_read()一样,但是可以接受大文件的文件描述符集,而不仅仅是常规文件。
7、intsnmp_select_info(numfds, fdset, timeout, block)
int *numfds;
fd_set *fdset;
structtimeval *timeout;
int *block;
输入:如果输入的timeout没有被定义,block设为1;如果输入的timeout被定义了,block设为0。
输出:如果输出的timeout没有被定义,block被视为1;如果输出的timeout被定义了,block被设为0。
上面的输入输出指定是参数timeout和block。
该函数的返回值为可以操作的socket数量,并且这些socket已经被选到了fdset里,供后续的select操作。
Snmp_read, snmp_select_info,and snmp_timeout provide an interface for the use of the select(2) system callso that SNMP transactions can occur asynchronously.
红色星星:数据结构说明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)