diff --git a/routing/kademlia.c b/routing/kademlia.c index 6475606..11051b4 100644 --- a/routing/kademlia.c +++ b/routing/kademlia.c @@ -442,9 +442,16 @@ struct MultiAddress** search_kademlia(char* peer_id, int timeout) char str[sizeof ipstr + 16]; int c = 0; - to = search_kademlia_internal (id, 0, to); // Repeat search to collect result. - if (to == 0) return NULL; // time out. - usleep(2000000); // Wait a few seconds for the result. + // Wait for result or time out. + while (to > 0 && + search_result->ipv4_count == 0 && + search_result->ipv6_count == 0) { + to = search_kademlia_internal (id, 0, to); // Repeat search to collect result. + if (to <= 0) return NULL; // time out. + usleep(2000000); // Wait a few seconds for the result. + to -= 2000000; + } + ret = calloc(search_result->ipv4_count + search_result->ipv6_count + 1, // IPv4 + IPv6 itens and a NULL terminator. sizeof (struct MultiAddress*)); // array of pointer. if (!ret) {