Can the agent run multi-threaded?
Short answer - no.
Longer answer - not easily.
Net-SNMP within a single thread of an threaded application is fine, as long as all snmp code is kept within the same thread. This lets you add SNMP support to an existing threaded application.
If you are concerned with the time taken for to process requests for a particular agent, object or subtree, and you want the agent to continue to respond to other requests in the meantime, there are two options.
The first method is using AgentX sub-agents. If you have several tables, each implemented by a separate subagent, then a single request for entries from each of the tables will be processed in parallel (and the agent will continue to respond to other requests while it waits for the subagents to return the necessary information). But a request for several objects from the same table will be passed off to the relevant subagent, where it will (normally) be processed serially.
The second method is to use delegated requests + IPC to another process. If takes a long time to retrieve a value for a given object, then the object handler could do whatever necessary to start or communicate with another (non-SNMP) process/thread to actually retrieve the value, and mark the request as delegated. The main agent (or subagent) can then receive and process other requests while waiting for the delegated request to finish. Dealing with resource contention is all up to you.
All of this only applies to the GET family of requests. A SET request will block until all pending GET requests have finished, and then will not accept new requests until the SET is complete.
Adding full multi-thread support directly to the agent would be nice. We just need someone with time/money to do/sponsor the work.
- What MIBs are supported?
- What protocols are supported?
- How do I configure the agent?
- How do I remove a MIB from the agent?
- I've installed a new MIB file. Why can't I query it?
- How do I add a MIB to the agent?
- What's the difference between 'exec', 'sh', 'extend' and 'pass'?
- What's the difference between AgentX, SMUX and proxied SNMP?
- What is the purpose of 'dlmod'?
- Which extension mechanism should I use?
- Can I use AgentX when running under Windows?
- How can I run AgentX with a different socket address?
- How can I turn off SMUX support?
- How can I combine two copies of the 'mib2' tree from separate subagents?
- What traps are sent by the agent?
- Where are these traps sent to?
- How can I send a particular trap to selected destinations?
- When I run the agent it runs and then quits without staying around. Why?
- After a while the agent stops responding, and starts eating CPU time. Why?
- How can I stop other people getting at my agent?
- How can I listen on just one particular interface?
- The agent is complaining about 'snmpd.conf'. Where is this?
- Why does the agent complain about 'no access control information'?
- How do I configure access control?
- How do I configure SNMPv3 users?
- The 'createUser' line disappears when I start the agent. Why?
- What's the difference between /var/net-snmp and /usr/local/share/snmp?
- My new agent is ignoring the old snmpd.conf file. Why?
- Where should the snmpd.conf file go?
- Why am I getting "Connection refused"?
- Why can't I see values in the UCDavis 'extensible' or 'disk' trees?
- Why can't I see values in the UCDavis 'memory' or 'vmstat' tree?
- What do the CPU statistics mean - is this the load average?
- How do I get percentage CPU utilization using ssCpuRawIdle?
- What about multi-processor systems?
- The speed/type of my network interfaces is wrong - how can I fix it?
- The interface statistics for my subinterfaces are all zero - why?
- Does the agent support the RMON-MIB?
- What does "klread: bad address" mean?
- What does "nlist err: wombat not found" (or similar) mean?
- What does "Can't open /dev/kmem" mean?
- The system uptime (sysUpTime) returned is wrong!
- Can the agent run multi-threaded?
- Can I use AgentX (or an embedded SNMP agent) in a threaded application?