From 1da840464759f73efbc42238a91733f436991eaf Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 6 Apr 2017 10:11:04 +0300 Subject: [PATCH] modusocket: Handle a case when recv_q is empty when EOF is signaled. In this case, we can mark socket as closed directly. --- zephyr/modusocket.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/zephyr/modusocket.c b/zephyr/modusocket.c index 0bcbbce604..a5ed5c1b01 100644 --- a/zephyr/modusocket.c +++ b/zephyr/modusocket.c @@ -145,9 +145,14 @@ static void sock_received_cb(struct net_context *context, struct net_buf *net_bu // if net_buf == NULL, EOF if (net_buf == NULL) { struct net_buf *last_buf = _k_fifo_peek_tail(&socket->recv_q); - // We abuse "buf_sent" flag to store EOF flag - net_nbuf_set_buf_sent(last_buf, true); - DEBUG_printf("Set EOF flag on %p\n", last_buf); + if (last_buf == NULL) { + socket->state = STATE_PEER_CLOSED; + DEBUG_printf("Marked socket %p as peer-closed\n", socket); + } else { + // We abuse "buf_sent" flag to store EOF flag + net_nbuf_set_buf_sent(last_buf, true); + DEBUG_printf("Set EOF flag on %p\n", last_buf); + } return; }