+
+ /*
+ * generate a unique id
+ * NOTE: we don't have to worry about converting this to and from
+ * network byte order, the nameserver does not interpret this value
+ * and returns it unchanged
+ *
+ * we generate an id per request now (instead of per send) to allow
+ * late replies to be used.
+ */
+#ifdef HAVE_LRAND48
+ do
+ {
+ request->id = (request->id + lrand48()) & 0xffff;
+ } while (find_id(request->id));
+#else
+ int k = 0;
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ do
+ {
+ request->id = (request->id + k + tv.tv_usec) & 0xffff;
+ k++;
+ } while (find_id(request->id));
+#endif /* HAVE_LRAND48 */