summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/fs/pxe/dnsresolv.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/core/fs/pxe/dnsresolv.c b/core/fs/pxe/dnsresolv.c
index 76a905a2..2b263fad 100644
--- a/core/fs/pxe/dnsresolv.c
+++ b/core/fs/pxe/dnsresolv.c
@@ -247,7 +247,10 @@ uint32_t dns_resolv(const char *name)
continue;
oldtime = jiffies();
- while (1) {
+ do {
+ if (jiffies() - oldtime >= timeout)
+ goto again;
+
udp_read.status = 0;
udp_read.src_ip = srv;
udp_read.dest_ip = IPInfo.myip;
@@ -256,16 +259,8 @@ uint32_t dns_resolv(const char *name)
udp_read.buffer_size = PKTBUF_SIZE;
udp_read.buffer = FAR_PTR(DNSRecvBuf);
err = pxe_call(PXENV_UDP_READ, &udp_read);
- if (err || udp_read.status)
- continue;
-
- /* Got a packet, deal with it... */
- if (hd2->id == hd1->id)
- break;
+ } while (err || udp_read.status || hd2->id != hd1->id);
- if (jiffies() - oldtime >= timeout)
- goto again;
- }
if ((hd2->flags ^ 0x80) & htons(0xf80f))
goto badness;