如果启用了陷阱接收,SnmpMgrGetTrap功能返回未完成的陷阱数据,如果呼叫者未接收到该数据。
BOOL SnmpMgrGetTrap(
AsnObjectIdentifier【*企业】, | //生成企业 |
AsnNetworkAddress【*IPAddress】, | //生成IP地址 |
AsnInteger【* genericTrap】, | //通用陷阱类型 |
AsnInteger【* specificTrap】, | //企业特定类型 |
AsnTimeticks【*时间】, | //时间戳 |
RFC1157VarBindList【* variableBindings】 | //变量绑定 |
); |
参数
【企业】
[out]指向生成SNMP陷阱的企业的对象标识符。
【IPAddress】
[out]指向生成SNMP陷阱的企业的IP地址。
【genericTrap】
[out]指向通用陷阱的指示器。此参数可以是以下值之一:
值 | 含义 |
SNMP_GENERICTRAP_COLDSTART | 代理正在管理模式下初始化协议实体。它可能会改变其视图中的对象。 |
SNMP_GENERICTRAP_WARMSTART | 代理程序正在自己重新初始化,但它不会改变其视图中的对象。 |
SNMP_GENERICTRAP_LINKDOWN | 附加的界面已从up状态更改为下状态。变量绑定列表中的第一个变量标识了接口。 |
SNMP_GENERICTRAP_LINKUP | 附加的界面已从下状态更改为up状态。变量绑定列表中的第一个变量标识了接口。 |
SNMP_GENERICTRAP_AUTHFAILURE | 一个SNMP实体发送了一个SNMP消息,但是它虚假地声称属于一个已知的社区。 |
SNMP_GENERICTRAP_EGPNEIGHLOSS | EGP对等体已更改为下状态。变量绑定列表中的第一个变量标识EGP对等体的IP地址。 |
SNMP_GENERICTRAP_ENTERSPECIFIC | 发生非常事件,并在具有企业特定值的【specificTrap】参数中标识。 |
【specificTrap】
[out]指出生成的特定陷阱的指示。
【的timeStamp】
[out]指向要接收时间戳的变量。
【variableBindings】
[out]指向变量绑定列表。
返回值
如果函数返回一个陷阱,返回值为TRUE。
您应该重复调用SnmpMgrGetTrap功能,直到GetLastError 返回值为FALSE。GetLastError也可能会返回以下错误代码:
错误代码 | 含义 |
SNMP_MGMTAPI_TRAP_ERRORS | Indicates errors were encountered; traps are not accessible. |
SNMP_MGMTAPI_NOTRAPS | 表示没有可用的陷阱。 |
SNMP_MEM_ALLOC_ERROR | 表示内存分配错误。 |
备注
您必须使用SnmpUtilMemAlloc功能为RFC1157VarBindList结构的名单成员分配内存,但不需要释放它。
一旦操作系统完成任务,它会发送一个陷阱信号。内部SNMP信号检查陷阱信号,以通知SNMP管理器完成的任务。SnmpMgrTrapListen功能的【phTrapAvailable】参数指向允许事件驱动的SNMP陷阱采集事件。您可以忽略陷阱,并定期轮询SnmpMgrGetTrap陷阱的功能。
获取陷阱的另一种方法是使用WaitForSingleObject函数创建一个等待事件的线程。当事件发生时,线程应使用ResetEvent函数清除事件。那么线程应该重复调用SnmpMgrGetTrap,直到它返回一个值为FALSE。
始终致电SnmpMgrGetTrap SnmpMgrGetTrap功能SnmpMgrGetTrap以接收陷阱。如果SNMP管理员应用程序调用{??989796159} 【第一】来接收陷阱,则返回值为FALSE,即使有陷阱可用。如果应用程序在调用SnmpMgrTrapListen之前调用GetLastError,GetLastError将返回错误代码SNMP_MGMTAPI_TRAP_ERRORS。
也可以看看
SnmpMgrTrapListen, SnmpUtilMemAlloc, WaitForSingleObject,RFC1157VarBindList, ResetEvent