diff --git a/netutils/wiznet/wiznet_main.c b/netutils/wiznet/wiznet_main.c index 26cfc1580f..ed52e06a9a 100644 --- a/netutils/wiznet/wiznet_main.c +++ b/netutils/wiznet/wiznet_main.c @@ -865,6 +865,7 @@ static int recvfrom_request(int fd, FAR struct wiznet_s *priv, FAR struct usrsock_request_recvfrom_s *req = (FAR struct usrsock_request_recvfrom_s *)hdrbuf; struct usrsock_message_datareq_ack_s resp; + struct usrsock_message_req_ack_s reqack; struct wiznet_recv_msg cmsg; struct sockaddr_in *addr = (struct sockaddr_in *)&cmsg.addr; FAR struct usock_s *usock; @@ -927,11 +928,19 @@ static int recvfrom_request(int fd, FAR struct wiznet_s *priv, resp.valuelen = MIN(resp.valuelen_nontrunc, req->max_addrlen); - if (0 == ret) + if ((0 == ret) && (0 != cmsg.len)) { usock_send_event(fd, priv, usock, USRSOCK_EVENT_REMOTE_CLOSED ); + + /* Send ack only */ + + memset(&reqack, 0, sizeof(reqack)); + reqack.result = ret; + ret = f_send_ack_common(fd, req->head.xid, &reqack); + + goto err_out; } }