I know what's going wrong, but I'm not enough of a python geek to see a clean fix.
The basic idea is that the client sends a request and the server sends back a clump of packets. The client specifies the max clump size. What's happening is that at least one packet of the clump is getting lost. The code is supposed to reduce the clump size when that happens, but that's not working. Here is the code outline: mrulist calls doquery to get a clump of data there is an except phrase to reduce the clump size doquery calls sendrequest then getresponse getresponse returns the answer in self.response it also returns None (and maybe falls off the end with no return?) I think getresponse needs to return two things. one is the data the second is a flag: none, some, all There are lots of raises and excepts in there that I haven't sorted out. I think the code should return partial data. It doesn't. Or it doesn't get processed. What's the right way to structure this? Should we fix the current code, or make a drastic change? ---------- Where is the if for this else? Can else go with something other than if? The code past the else is the normal case. It gets run if the break doesn't happen. This chunk of code is from near the end of getresponse in pylib/packet.py # If we've seen the last fragment, look for holes in the sequence. # If there aren't any, we're done. if seenlastfrag and fragments[0].offset == 0: for f in range(1, len(fragments)): if fragments[f-1].end() != fragments[f].offset: warndbg("Hole in fragment sequence, %d of %d" % (f, len(fragments)), 1) break else: <=== this one tempfraglist = [ntp.poly.polystr(f.extension) \ for f in fragments] self.response = ntp.poly.polybytes("".join(tempfraglist)) warndbg("Fragment collection ends. %d bytes " " in %d fragments" % (len(self.response), len(fragments)), 1) -- These are my opinions. I hate spam. _______________________________________________ devel mailing list devel@ntpsec.org http://lists.ntpsec.org/mailman/listinfo/devel