diff --git a/sys/net/gnrc/sock/gnrc_sock.c b/sys/net/gnrc/sock/gnrc_sock.c index feaf829e07..92c375b8c1 100644 --- a/sys/net/gnrc/sock/gnrc_sock.c +++ b/sys/net/gnrc/sock/gnrc_sock.c @@ -58,7 +58,7 @@ static void _netapi_cb(uint16_t cmd, gnrc_pktsnip_t *pkt, void *ctx) (void *)®->mbox); } if (reg->async_cb.generic) { - reg->async_cb.generic(reg, SOCK_ASYNC_MSG_RECV, NULL); + reg->async_cb.generic(reg, SOCK_ASYNC_MSG_RECV, reg->async_cb_arg); } } } diff --git a/sys/net/gnrc/sock/include/sock_types.h b/sys/net/gnrc/sock/include/sock_types.h index d5488b5765..2cd52987f5 100644 --- a/sys/net/gnrc/sock/include/sock_types.h +++ b/sys/net/gnrc/sock/include/sock_types.h @@ -87,6 +87,7 @@ struct gnrc_sock_reg { sock_udp_cb_t udp; /**< UDP version */ #endif } async_cb; + void *async_cb_arg; /**< asynchronous callback argument */ #ifdef SOCK_HAS_ASYNC_CTX sock_async_ctx_t async_ctx; /**< asynchronous event context */ #endif diff --git a/sys/net/gnrc/sock/ip/gnrc_sock_ip.c b/sys/net/gnrc/sock/ip/gnrc_sock_ip.c index eec36d90d6..3877acc62d 100644 --- a/sys/net/gnrc/sock/ip/gnrc_sock_ip.c +++ b/sys/net/gnrc/sock/ip/gnrc_sock_ip.c @@ -198,7 +198,7 @@ ssize_t sock_ip_send(sock_ip_t *sock, const void *data, size_t len, #ifdef SOCK_HAS_ASYNC if ((sock != NULL) && (sock->reg.async_cb.ip)) { sock->reg.async_cb.ip(sock, SOCK_ASYNC_MSG_SENT, - NULL); + sock->reg.async_cb_arg); } #endif /* SOCK_HAS_ASYNC */ return res; @@ -207,7 +207,7 @@ ssize_t sock_ip_send(sock_ip_t *sock, const void *data, size_t len, #ifdef SOCK_HAS_ASYNC void sock_ip_set_cb(sock_ip_t *sock, sock_ip_cb_t cb, void *arg) { - (void)arg; + sock->reg.async_cb_arg = arg; sock->reg.async_cb.ip = cb; } diff --git a/sys/net/gnrc/sock/udp/gnrc_sock_udp.c b/sys/net/gnrc/sock/udp/gnrc_sock_udp.c index b42f896a7f..31655b6274 100644 --- a/sys/net/gnrc/sock/udp/gnrc_sock_udp.c +++ b/sys/net/gnrc/sock/udp/gnrc_sock_udp.c @@ -320,7 +320,7 @@ ssize_t sock_udp_send(sock_udp_t *sock, const void *data, size_t len, #ifdef SOCK_HAS_ASYNC if ((sock != NULL) && (sock->reg.async_cb.udp)) { sock->reg.async_cb.udp(sock, SOCK_ASYNC_MSG_SENT, - NULL); + sock->reg.async_cb_arg); } #endif /* SOCK_HAS_ASYNC */ return res; @@ -329,7 +329,7 @@ ssize_t sock_udp_send(sock_udp_t *sock, const void *data, size_t len, #ifdef SOCK_HAS_ASYNC void sock_udp_set_cb(sock_udp_t *sock, sock_udp_cb_t cb, void *arg) { - (void)arg; + sock->reg.async_cb_arg = arg; sock->reg.async_cb.udp = cb; }