From 86ff4d3dc54483385f9f84f15d06460165ed5776 Mon Sep 17 00:00:00 2001 From: Ken Bannister <kb2ma@runbox.com> Date: Tue, 25 Dec 2018 00:33:26 -0500 Subject: [PATCH] net/nanocoap: fix request retry countdown --- sys/net/application_layer/nanocoap/sock.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/sys/net/application_layer/nanocoap/sock.c b/sys/net/application_layer/nanocoap/sock.c index c722a553b0..ae3375199f 100644 --- a/sys/net/application_layer/nanocoap/sock.c +++ b/sys/net/application_layer/nanocoap/sock.c @@ -46,19 +46,14 @@ ssize_t nanocoap_request(coap_pkt_t *pkt, sock_udp_ep_t *local, sock_udp_ep_t *r /* TODO: timeout random between between ACK_TIMEOUT and (ACK_TIMEOUT * * ACK_RANDOM_FACTOR) */ - uint32_t timeout = COAP_ACK_TIMEOUT * (1000000U); - int tries = 0; - while (tries++ < COAP_MAX_RETRANSMIT) { - if (!tries) { - DEBUG("nanocoap: maximum retries reached.\n"); - res = -ETIMEDOUT; - goto out; - } + uint32_t timeout = COAP_ACK_TIMEOUT * US_PER_SEC; + unsigned tries_left = COAP_MAX_RETRANSMIT + 1; /* add 1 for initial transmit */ + while (tries_left) { res = sock_udp_send(&sock, buf, pdu_len, NULL); if (res <= 0) { DEBUG("nanocoap: error sending coap request\n"); - goto out; + break; } res = sock_udp_recv(&sock, buf, len, timeout, NULL); @@ -67,6 +62,10 @@ ssize_t nanocoap_request(coap_pkt_t *pkt, sock_udp_ep_t *local, sock_udp_ep_t *r DEBUG("nanocoap: timeout\n"); timeout *= 2; + tries_left--; + if (!tries_left) { + DEBUG("nanocoap: maximum retries reached\n"); + } continue; } DEBUG("nanocoap: error receiving coap request\n"); @@ -81,7 +80,6 @@ ssize_t nanocoap_request(coap_pkt_t *pkt, sock_udp_ep_t *local, sock_udp_ep_t *r } } -out: sock_udp_close(&sock); return res; -- GitLab