@@ -557,16 +557,17 @@ static int handle_poll(void)
557
557
struct coap_packet response ;
558
558
bool response_truncated = false;
559
559
560
- k_mutex_lock (& clients [i ]-> lock , K_FOREVER );
561
-
562
560
ret = recv_response (clients [i ], & response , & response_truncated );
563
561
if (ret < 0 ) {
562
+ if (ret == - EAGAIN ) {
563
+ continue ;
564
+ }
564
565
LOG_ERR ("Error receiving response" );
565
566
cancel_requests_with (clients [i ], - EIO );
566
- k_mutex_unlock (& clients [i ]-> lock );
567
567
continue ;
568
568
}
569
569
570
+ k_mutex_lock (& clients [i ]-> lock , K_FOREVER );
570
571
ret = handle_response (clients [i ], & response , response_truncated );
571
572
if (ret < 0 ) {
572
573
LOG_ERR ("Error handling response" );
@@ -622,14 +623,11 @@ static int recv_response(struct coap_client *client, struct coap_packet *respons
622
623
& client -> address , & client -> socklen );
623
624
624
625
if (total_len < 0 ) {
625
- LOG_ERR ("Error reading response: %d" , errno );
626
- if (errno == EOPNOTSUPP ) {
627
- return - errno ;
628
- }
629
- return - EINVAL ;
626
+ ret = - errno ;
627
+ return ret ;
630
628
} else if (total_len == 0 ) {
631
- LOG_ERR ( "Zero length recv" );
632
- return - EINVAL ;
629
+ /* Ignore, UDP can be zero length, but it is not CoAP anymore */
630
+ return 0 ;
633
631
}
634
632
635
633
available_len = MIN (total_len , sizeof (client -> recv_buf ));
@@ -640,7 +638,6 @@ static int recv_response(struct coap_client *client, struct coap_packet *respons
640
638
ret = coap_packet_parse (response , client -> recv_buf , available_len , NULL , 0 );
641
639
if (ret < 0 ) {
642
640
LOG_ERR ("Invalid data received" );
643
- return ret ;
644
641
}
645
642
646
643
return ret ;
0 commit comments