Your scanner is great. Have you heard of onesixtyone? Its a very short C based program that I have had great success with. The premise is that it sends a ton of snmpget requests very quickly (see the attached version). These snmpgets are not using any libraries, they are udp packets specifically crafted in the c code. They are all simple snmpget on the system oid, which almost everything that uses snmp will respond on. I can use this to scan lots of IPs very quickly to see if they are going to respond to snmp request on a given community.
although fast, it is not multi-threaded. I can see your application doing something very similar as an fetcher. Once an IP responds to a ping, it is followed up with this snmp request on the system oid. (for each community, as sometimes I want to try lots of communities to see what answers)
The concept of onesixtyone is that it fires off the queries and holds a port open to listen and collect responses but does not really corrlate each query to a response. whatever comes back is just dumped into an output log.
my direct email is firstname.lastname@example.org. I work a lot with Cisco on systems and tools like this so I am eager to see if you have interest in this.