diff options
| -rw-r--r-- | core/fs/pxe/dnsresolv.c | 15 |
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; |
