diff --git a/pkg/lwip/contrib/sock/lwip_sock.c b/pkg/lwip/contrib/sock/lwip_sock.c index 11680fd298..a65a9c4540 100644 --- a/pkg/lwip/contrib/sock/lwip_sock.c +++ b/pkg/lwip/contrib/sock/lwip_sock.c @@ -548,6 +548,13 @@ int lwip_sock_recv(struct netconn *conn, uint32_t timeout, struct netbuf **buf) /* unset flags */ #if LWIP_SO_RCVTIMEO netconn_set_recvtimeout(conn, 0); +#endif +#if IS_ACTIVE(SOCK_HAS_ASYNC) + lwip_sock_base_t *sock = netconn_get_callback_arg(conn); + + if (sock && sock->async_cb.gen && cib_avail(&conn->recvmbox.mbox.cib)) { + sock->async_cb.gen(sock, SOCK_ASYNC_MSG_RECV, sock->async_cb_arg); + } #endif return res; } diff --git a/pkg/lwip/contrib/sock/tcp/lwip_sock_tcp.c b/pkg/lwip/contrib/sock/tcp/lwip_sock_tcp.c index ae403a153a..c9764f25d8 100644 --- a/pkg/lwip/contrib/sock/tcp/lwip_sock_tcp.c +++ b/pkg/lwip/contrib/sock/tcp/lwip_sock_tcp.c @@ -254,6 +254,13 @@ int sock_tcp_accept(sock_tcp_queue_t *queue, sock_tcp_t **sock, } #if LWIP_SO_RCVTIMEO netconn_set_recvtimeout(queue->base.conn, 0); +#endif +#if IS_ACTIVE(SOCK_HAS_ASYNC) + if (queue->base.async_cb.gen && + cib_avail(&queue->base.conn->acceptmbox.mbox.cib)) { + queue->base.async_cb.gen(&queue->base, SOCK_ASYNC_CONN_RECV, + queue->base.async_cb_arg); + } #endif mutex_unlock(&queue->mutex); return res;