diff --git a/src/api/api_lib.c b/src/api/api_lib.c index 94aa0dc0..02d284b1 100644 --- a/src/api/api_lib.c +++ b/src/api/api_lib.c @@ -496,10 +496,13 @@ netconn_recv(struct netconn *conn) } sys_mbox_fetch(conn->recvmbox, (void **)&p); - conn->recv_avail -= p->tot_len; - /* Register event with callback */ - if (conn->callback) + + if (p != NULL) { + conn->recv_avail -= p->tot_len; + /* Register event with callback */ + if (conn->callback) (*conn->callback)(conn, NETCONN_EVT_RCVMINUS, p->tot_len); + } /* If we are closed, we indicate that we no longer wish to recieve data by setting conn->recvmbox to SYS_MBOX_NULL. */ diff --git a/src/api/api_msg.c b/src/api/api_msg.c index 83cd80ab..c3b84375 100644 --- a/src/api/api_msg.c +++ b/src/api/api_msg.c @@ -51,11 +51,14 @@ recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) } if(conn->recvmbox != SYS_MBOX_NULL) { + conn->err = err; - conn->recv_avail += p->tot_len; - /* Register event with callback */ - if (conn->callback) + if (p != NULL) { + conn->recv_avail += p->tot_len; + /* Register event with callback */ + if (conn->callback) (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, p->tot_len); + } sys_mbox_post(conn->recvmbox, p); } return ERR_OK;