From 4766318ee894a015ab8544477c341e6cd80fdd3f Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Mon, 27 Nov 2017 14:51:21 +0100 Subject: [PATCH 1/7] sock: extend API for asynchronous event management --- sys/include/net/sock.h | 21 +++++++++++++++++++++ sys/include/net/sock/ip.h | 6 ++++++ sys/include/net/sock/tcp.h | 6 ++++++ sys/include/net/sock/udp.h | 6 ++++++ 4 files changed, 39 insertions(+) diff --git a/sys/include/net/sock.h b/sys/include/net/sock.h index dee7d009e778..18e5e8f8af79 100644 --- a/sys/include/net/sock.h +++ b/sys/include/net/sock.h @@ -103,6 +103,10 @@ #include +#if defined(SOCK_HAS_ASYNC) && defined(RIOT_VERSION) +#include "event.h" +#endif + #ifdef __cplusplus extern "C" { #endif @@ -114,6 +118,7 @@ extern "C" { * @{ */ #define SOCK_HAS_IPV6 /**< activate IPv6 support */ +#define SOCK_HAS_ASYNC /**< activate asynchronous event functionality */ /** @} */ #endif @@ -152,6 +157,22 @@ extern "C" { */ #define SOCK_NO_TIMEOUT (UINT32_MAX) +#if defined(SOCK_HAS_ASYNC) || defined(DOXYGEN) +/** + * @brief Event types for asynchronous event functionality + * @note Only available with @ref SOCK_HAS_ASYNC defined. + */ +typedef enum { + SOCK_EVENT_RECEIVE = 0, /**< receive event */ + /** + * @brief number of event types (for internal arrays) + * + * @note Please keep this last. + */ + SOCK_EVENT_NUMOF, +} sock_event_t; +#endif + /** * @brief Abstract IP end point and end point for a raw IP sock object */ diff --git a/sys/include/net/sock/ip.h b/sys/include/net/sock/ip.h index 17950625d37f..9ea52b78605a 100644 --- a/sys/include/net/sock/ip.h +++ b/sys/include/net/sock/ip.h @@ -332,6 +332,12 @@ typedef struct sock_ip sock_ip_t; int sock_ip_create(sock_ip_t *sock, const sock_ip_ep_t *local, const sock_ip_ep_t *remote, uint8_t proto, uint16_t flags); +#if defined(SOCK_HAS_ASYNC) || defined(DOXYGEN) +void sock_p_set_event_queue(sock_ip_t *sock, event_queue_t *queue); +void sock_ip_set_event_handler(sock_ip_t *sock, sock_event_type_t *type, + event_handler_t handler); +#endif + /** * @brief Closes a raw IPv4/IPv6 sock object * diff --git a/sys/include/net/sock/tcp.h b/sys/include/net/sock/tcp.h index ebdc374fcc93..de73e713ca85 100644 --- a/sys/include/net/sock/tcp.h +++ b/sys/include/net/sock/tcp.h @@ -387,6 +387,12 @@ int sock_tcp_listen(sock_tcp_queue_t *queue, const sock_tcp_ep_t *local, sock_tcp_t *queue_array, unsigned queue_len, uint16_t flags); +#if defined(SOCK_HAS_ASYNC) || defined(DOXYGEN) +void sock_tcp_set_event_queue(sock_tcp_t *sock, event_queue_t *queue); +void sock_tcp_set_event_handler(sock_tcp_t *sock, sock_event_type_t *type, + event_handler_t handler); +#endif + /** * @brief Disconnects a TCP connection * diff --git a/sys/include/net/sock/udp.h b/sys/include/net/sock/udp.h index 82136a1552e6..914d3715e496 100644 --- a/sys/include/net/sock/udp.h +++ b/sys/include/net/sock/udp.h @@ -333,6 +333,12 @@ typedef struct sock_udp sock_udp_t; int sock_udp_create(sock_udp_t *sock, const sock_udp_ep_t *local, const sock_udp_ep_t *remote, uint16_t flags); +#if defined(SOCK_HAS_ASYNC) || defined(DOXYGEN) +void sock_udp_set_event_queue(sock_udp_t *sock, event_queue_t *queue); +void sock_udp_set_event_handler(sock_udp_t *sock, sock_event_type_t *type, + event_handler_t handler); +#endif + /** * @brief Closes a UDP sock object * From fa691a0c55f7938a56a4f375f100b8616352455e Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Thu, 30 Nov 2017 20:19:17 +0100 Subject: [PATCH 2/7] fixup! sock: extend API for asynchronous event management --- sys/include/net/sock/ip.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/include/net/sock/ip.h b/sys/include/net/sock/ip.h index 9ea52b78605a..2b83fab5a7d0 100644 --- a/sys/include/net/sock/ip.h +++ b/sys/include/net/sock/ip.h @@ -333,7 +333,7 @@ int sock_ip_create(sock_ip_t *sock, const sock_ip_ep_t *local, const sock_ip_ep_t *remote, uint8_t proto, uint16_t flags); #if defined(SOCK_HAS_ASYNC) || defined(DOXYGEN) -void sock_p_set_event_queue(sock_ip_t *sock, event_queue_t *queue); +void sock_ip_set_event_queue(sock_ip_t *sock, event_queue_t *queue); void sock_ip_set_event_handler(sock_ip_t *sock, sock_event_type_t *type, event_handler_t handler); #endif From 0dfe0acc6e8b6752b1ed05b9965653d6d7f461dd Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Fri, 1 Dec 2017 15:43:21 +0100 Subject: [PATCH 3/7] fixup! sock: extend API for asynchronous event management --- sys/include/net/sock.h | 5 +++++ sys/include/net/sock/ip.h | 31 ++++++++++++++++++++++++++++++- sys/include/net/sock/tcp.h | 29 +++++++++++++++++++++++++++++ sys/include/net/sock/udp.h | 28 ++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 1 deletion(-) diff --git a/sys/include/net/sock.h b/sys/include/net/sock.h index 18e5e8f8af79..e2f076dc69f2 100644 --- a/sys/include/net/sock.h +++ b/sys/include/net/sock.h @@ -103,6 +103,11 @@ #include +#ifdef MODULE_SOCK_ASYNC && !defined(DOXYGEN) +#define SOCK_HAS_ASYNC /**< allow sock_async to be defined as a provided + * feature of a stack */ +#endif + #if defined(SOCK_HAS_ASYNC) && defined(RIOT_VERSION) #include "event.h" #endif diff --git a/sys/include/net/sock/ip.h b/sys/include/net/sock/ip.h index 2b83fab5a7d0..5c2daba29b77 100644 --- a/sys/include/net/sock/ip.h +++ b/sys/include/net/sock/ip.h @@ -333,8 +333,37 @@ int sock_ip_create(sock_ip_t *sock, const sock_ip_ep_t *local, const sock_ip_ep_t *remote, uint8_t proto, uint16_t flags); #if defined(SOCK_HAS_ASYNC) || defined(DOXYGEN) +/** + * @brief Set the event queue for asynchronous events for a raw IPv4/IPv6 sock + * object + * + * @pre `sock == NULL` + * + * @note Only one event queue per sock can be set. Since + * event_queue_t::waiter only allows for one thread to own the queue. + * This also implies, that **only one thread can execute the event + * handlers** added via @ref sock_ip_set_event_handler()! + * + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. + */ void sock_ip_set_event_queue(sock_ip_t *sock, event_queue_t *queue); -void sock_ip_set_event_handler(sock_ip_t *sock, sock_event_type_t *type, + +/** + * @brief Sets an event handler for asynchronous events of [a certain + * type](@ref sock_event_type_t) for a raw IPv4/IPv6 sock object + * + * @pre `sock != NULL` + * @pre `type < SOCK_EVENT_NUMOF` + * + * @param[in] sock The sock to set the event handler for. May not be + * `NULL` + * @param[in] type The [event type](@ref sock_event_type_t), @p handler + * should handle. Must be < @ref SOCK_EVENT_NUMOF. + * @param[in] handler The event handler for @p type. May be `NULL` to unset + * the event handler for @p type. + */ +void sock_ip_set_event_handler(sock_ip_t *sock, sock_event_type_t type, event_handler_t handler); #endif diff --git a/sys/include/net/sock/tcp.h b/sys/include/net/sock/tcp.h index de73e713ca85..8e4820bc2171 100644 --- a/sys/include/net/sock/tcp.h +++ b/sys/include/net/sock/tcp.h @@ -388,7 +388,36 @@ int sock_tcp_listen(sock_tcp_queue_t *queue, const sock_tcp_ep_t *local, uint16_t flags); #if defined(SOCK_HAS_ASYNC) || defined(DOXYGEN) +/** + * @brief Set the event queue for asynchronous events for a TCP sock + * object + * + * @pre `sock == NULL` + * + * @note Only one event queue per sock can be set. Since + * event_queue_t::waiter only allows for one thread to own the queue. + * This also implies, that **only one thread can execute the event + * handlers** added via @ref sock_tcp_set_event_handler()! + * + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. + */ void sock_tcp_set_event_queue(sock_tcp_t *sock, event_queue_t *queue); + +/** + * @brief Sets an event handler for asynchronous events of [a certain + * type](@ref sock_event_type_t) for a raw TCP sock object + * + * @pre `sock != NULL` + * @pre `type < SOCK_EVENT_NUMOF` + * + * @param[in] sock The sock to set the event handler for. May not be + * `NULL` + * @param[in] type The [event type](@ref sock_event_type_t), @p handler + * should handle. Must be < @ref SOCK_EVENT_NUMOF. + * @param[in] handler The event handler for @p type. May be `NULL` to unset + * the event handler for @p type. + */ void sock_tcp_set_event_handler(sock_tcp_t *sock, sock_event_type_t *type, event_handler_t handler); #endif diff --git a/sys/include/net/sock/udp.h b/sys/include/net/sock/udp.h index 914d3715e496..191f7e1ac713 100644 --- a/sys/include/net/sock/udp.h +++ b/sys/include/net/sock/udp.h @@ -334,7 +334,35 @@ int sock_udp_create(sock_udp_t *sock, const sock_udp_ep_t *local, const sock_udp_ep_t *remote, uint16_t flags); #if defined(SOCK_HAS_ASYNC) || defined(DOXYGEN) +/** + * @brief Set the event queue for asynchronous events for a UDP sock object + * + * @pre `sock == NULL` + * + * @note Only one event queue per sock can be set. Since + * event_queue_t::waiter only allows for one thread to own the queue. + * This also implies, that **only one thread can execute the event + * handlers** added via @ref sock_udp_set_event_handler()! + * + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. + */ void sock_udp_set_event_queue(sock_udp_t *sock, event_queue_t *queue); + +/** + * @brief Sets an event handler for asynchronous events of [a certain + * type](@ref sock_event_type_t) for a UDP sock object + * + * @pre `sock != NULL` + * @pre `type < SOCK_EVENT_NUMOF` + * + * @param[in] sock The sock to set the event handler for. May not be + * `NULL` + * @param[in] type The [event type](@ref sock_event_type_t), @p handler + * should handle. Must be < @ref SOCK_EVENT_NUMOF. + * @param[in] handler The event handler for @p type. May be `NULL` to unset + * the event handler for @p type. + */ void sock_udp_set_event_handler(sock_udp_t *sock, sock_event_type_t *type, event_handler_t handler); #endif From 71c99a5a71e24bce481e7d2a7fbb0d9d6fb2199c Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Mon, 11 Dec 2017 11:33:39 +0100 Subject: [PATCH 4/7] fixup! sock: extend API for asynchronous event management --- sys/include/net/sock/ip.h | 9 ++++++--- sys/include/net/sock/tcp.h | 9 ++++++--- sys/include/net/sock/udp.h | 9 ++++++--- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/sys/include/net/sock/ip.h b/sys/include/net/sock/ip.h index 5c2daba29b77..1280e6084a9f 100644 --- a/sys/include/net/sock/ip.h +++ b/sys/include/net/sock/ip.h @@ -344,10 +344,13 @@ int sock_ip_create(sock_ip_t *sock, const sock_ip_ep_t *local, * This also implies, that **only one thread can execute the event * handlers** added via @ref sock_ip_set_event_handler()! * - * @param[in] sock The sock to set the event queue for. May not be `NULL`. - * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] event_pool Pool of event to allocate in case an event is fired. + * @param[in] event_pool_size Size of @p event_pool. */ -void sock_ip_set_event_queue(sock_ip_t *sock, event_queue_t *queue); +void sock_ip_set_event_queue(sock_ip_t *sock, event_queue_t *queue, + event_t *event_pool, size_t event_pool_size); /** * @brief Sets an event handler for asynchronous events of [a certain diff --git a/sys/include/net/sock/tcp.h b/sys/include/net/sock/tcp.h index 8e4820bc2171..4766261d30db 100644 --- a/sys/include/net/sock/tcp.h +++ b/sys/include/net/sock/tcp.h @@ -399,10 +399,13 @@ int sock_tcp_listen(sock_tcp_queue_t *queue, const sock_tcp_ep_t *local, * This also implies, that **only one thread can execute the event * handlers** added via @ref sock_tcp_set_event_handler()! * - * @param[in] sock The sock to set the event queue for. May not be `NULL`. - * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] event_pool Pool of event to allocate in case an event is fired. + * @param[in] event_pool_size Size of @p event_pool. */ -void sock_tcp_set_event_queue(sock_tcp_t *sock, event_queue_t *queue); +void sock_tcp_set_event_queue(sock_tcp_t *sock, event_queue_t *queuei, + event_t *event_pool, size_t event_pool_size); /** * @brief Sets an event handler for asynchronous events of [a certain diff --git a/sys/include/net/sock/udp.h b/sys/include/net/sock/udp.h index 191f7e1ac713..c5344d240569 100644 --- a/sys/include/net/sock/udp.h +++ b/sys/include/net/sock/udp.h @@ -344,10 +344,13 @@ int sock_udp_create(sock_udp_t *sock, const sock_udp_ep_t *local, * This also implies, that **only one thread can execute the event * handlers** added via @ref sock_udp_set_event_handler()! * - * @param[in] sock The sock to set the event queue for. May not be `NULL`. - * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] event_pool Pool of event to allocate in case an event is fired. + * @param[in] event_pool_size Size of @p event_pool. */ -void sock_udp_set_event_queue(sock_udp_t *sock, event_queue_t *queue); +void sock_udp_set_event_queue(sock_udp_t *sock, event_queue_t *queue, + event_t *event_pool, size_t event_pool_size); /** * @brief Sets an event handler for asynchronous events of [a certain From 3720d92eb7d66125ed02c98298f7de873d26a229 Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Mon, 11 Dec 2017 11:57:36 +0100 Subject: [PATCH 5/7] fixup! sock: extend API for asynchronous event management This reverts commit 8ed775acdc10115d5ca25d9df18f588363644c49. --- sys/include/net/sock/ip.h | 9 +++------ sys/include/net/sock/tcp.h | 9 +++------ sys/include/net/sock/udp.h | 9 +++------ 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/sys/include/net/sock/ip.h b/sys/include/net/sock/ip.h index 1280e6084a9f..5c2daba29b77 100644 --- a/sys/include/net/sock/ip.h +++ b/sys/include/net/sock/ip.h @@ -344,13 +344,10 @@ int sock_ip_create(sock_ip_t *sock, const sock_ip_ep_t *local, * This also implies, that **only one thread can execute the event * handlers** added via @ref sock_ip_set_event_handler()! * - * @param[in] sock The sock to set the event queue for. May not be `NULL`. - * @param[in] queue The queue to set. May be `NULL` to unset the queue. - * @param[in] event_pool Pool of event to allocate in case an event is fired. - * @param[in] event_pool_size Size of @p event_pool. + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. */ -void sock_ip_set_event_queue(sock_ip_t *sock, event_queue_t *queue, - event_t *event_pool, size_t event_pool_size); +void sock_ip_set_event_queue(sock_ip_t *sock, event_queue_t *queue); /** * @brief Sets an event handler for asynchronous events of [a certain diff --git a/sys/include/net/sock/tcp.h b/sys/include/net/sock/tcp.h index 4766261d30db..8e4820bc2171 100644 --- a/sys/include/net/sock/tcp.h +++ b/sys/include/net/sock/tcp.h @@ -399,13 +399,10 @@ int sock_tcp_listen(sock_tcp_queue_t *queue, const sock_tcp_ep_t *local, * This also implies, that **only one thread can execute the event * handlers** added via @ref sock_tcp_set_event_handler()! * - * @param[in] sock The sock to set the event queue for. May not be `NULL`. - * @param[in] queue The queue to set. May be `NULL` to unset the queue. - * @param[in] event_pool Pool of event to allocate in case an event is fired. - * @param[in] event_pool_size Size of @p event_pool. + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. */ -void sock_tcp_set_event_queue(sock_tcp_t *sock, event_queue_t *queuei, - event_t *event_pool, size_t event_pool_size); +void sock_tcp_set_event_queue(sock_tcp_t *sock, event_queue_t *queue); /** * @brief Sets an event handler for asynchronous events of [a certain diff --git a/sys/include/net/sock/udp.h b/sys/include/net/sock/udp.h index c5344d240569..191f7e1ac713 100644 --- a/sys/include/net/sock/udp.h +++ b/sys/include/net/sock/udp.h @@ -344,13 +344,10 @@ int sock_udp_create(sock_udp_t *sock, const sock_udp_ep_t *local, * This also implies, that **only one thread can execute the event * handlers** added via @ref sock_udp_set_event_handler()! * - * @param[in] sock The sock to set the event queue for. May not be `NULL`. - * @param[in] queue The queue to set. May be `NULL` to unset the queue. - * @param[in] event_pool Pool of event to allocate in case an event is fired. - * @param[in] event_pool_size Size of @p event_pool. + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. */ -void sock_udp_set_event_queue(sock_udp_t *sock, event_queue_t *queue, - event_t *event_pool, size_t event_pool_size); +void sock_udp_set_event_queue(sock_udp_t *sock, event_queue_t *queue); /** * @brief Sets an event handler for asynchronous events of [a certain From c043fe87965e5fd3f779cd5f15567f17b26ffc1a Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Mon, 11 Dec 2017 12:20:41 +0100 Subject: [PATCH 6/7] fixup! sock: extend API for asynchronous event management --- sys/include/net/sock.h | 22 +++++++++++++--------- sys/include/net/sock/ip.h | 31 ++++++++----------------------- sys/include/net/sock/tcp.h | 29 +++++++---------------------- sys/include/net/sock/udp.h | 31 ++++++++----------------------- 4 files changed, 36 insertions(+), 77 deletions(-) diff --git a/sys/include/net/sock.h b/sys/include/net/sock.h index e2f076dc69f2..336cf5bdeded 100644 --- a/sys/include/net/sock.h +++ b/sys/include/net/sock.h @@ -166,16 +166,20 @@ extern "C" { /** * @brief Event types for asynchronous event functionality * @note Only available with @ref SOCK_HAS_ASYNC defined. + * @anchor net_sock_event_type + * @{ */ -typedef enum { - SOCK_EVENT_RECEIVE = 0, /**< receive event */ - /** - * @brief number of event types (for internal arrays) - * - * @note Please keep this last. - */ - SOCK_EVENT_NUMOF, -} sock_event_t; +#define SOCK_EVENT_RECV (0x00000001) /**< Receive event */ +/** @} */ + +/** + * @brief Sock event + */ +typedef struct { + event_t super; /**< event_callback_t structure that gets extended */ + void *sock; /**< sock that emitted the event */ + uint32_t type; /**< [Event type](@ref net_sock_event_type) flags */ +} sock_event_t #endif /** diff --git a/sys/include/net/sock/ip.h b/sys/include/net/sock/ip.h index 5c2daba29b77..3ef91ade0939 100644 --- a/sys/include/net/sock/ip.h +++ b/sys/include/net/sock/ip.h @@ -337,34 +337,19 @@ int sock_ip_create(sock_ip_t *sock, const sock_ip_ep_t *local, * @brief Set the event queue for asynchronous events for a raw IPv4/IPv6 sock * object * - * @pre `sock == NULL` + * @pre `sock != NULL` * * @note Only one event queue per sock can be set. Since * event_queue_t::waiter only allows for one thread to own the queue. - * This also implies, that **only one thread can execute the event - * handlers** added via @ref sock_ip_set_event_handler()! + * This also implies, that **only one thread can execute the + * @p handler**! * - * @param[in] sock The sock to set the event queue for. May not be `NULL`. - * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] handler The event handler. May be `NULL` to unset. */ -void sock_ip_set_event_queue(sock_ip_t *sock, event_queue_t *queue); - -/** - * @brief Sets an event handler for asynchronous events of [a certain - * type](@ref sock_event_type_t) for a raw IPv4/IPv6 sock object - * - * @pre `sock != NULL` - * @pre `type < SOCK_EVENT_NUMOF` - * - * @param[in] sock The sock to set the event handler for. May not be - * `NULL` - * @param[in] type The [event type](@ref sock_event_type_t), @p handler - * should handle. Must be < @ref SOCK_EVENT_NUMOF. - * @param[in] handler The event handler for @p type. May be `NULL` to unset - * the event handler for @p type. - */ -void sock_ip_set_event_handler(sock_ip_t *sock, sock_event_type_t type, - event_handler_t handler); +void sock_ip_set_event_queue(sock_ip_t *sock, event_queue_t *queue, + event_handler_t handler); #endif /** diff --git a/sys/include/net/sock/tcp.h b/sys/include/net/sock/tcp.h index 8e4820bc2171..35d5bea91169 100644 --- a/sys/include/net/sock/tcp.h +++ b/sys/include/net/sock/tcp.h @@ -392,33 +392,18 @@ int sock_tcp_listen(sock_tcp_queue_t *queue, const sock_tcp_ep_t *local, * @brief Set the event queue for asynchronous events for a TCP sock * object * - * @pre `sock == NULL` + * @pre `sock != NULL` * * @note Only one event queue per sock can be set. Since * event_queue_t::waiter only allows for one thread to own the queue. - * This also implies, that **only one thread can execute the event - * handlers** added via @ref sock_tcp_set_event_handler()! + * This also implies, that **only one thread can execute the + * @p handler**! * - * @param[in] sock The sock to set the event queue for. May not be `NULL`. - * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] handler The event handler. May be `NULL` to unset. */ -void sock_tcp_set_event_queue(sock_tcp_t *sock, event_queue_t *queue); - -/** - * @brief Sets an event handler for asynchronous events of [a certain - * type](@ref sock_event_type_t) for a raw TCP sock object - * - * @pre `sock != NULL` - * @pre `type < SOCK_EVENT_NUMOF` - * - * @param[in] sock The sock to set the event handler for. May not be - * `NULL` - * @param[in] type The [event type](@ref sock_event_type_t), @p handler - * should handle. Must be < @ref SOCK_EVENT_NUMOF. - * @param[in] handler The event handler for @p type. May be `NULL` to unset - * the event handler for @p type. - */ -void sock_tcp_set_event_handler(sock_tcp_t *sock, sock_event_type_t *type, +void sock_tcp_set_event_handler(sock_tcp_t *sock, event_queue_t *queue, event_handler_t handler); #endif diff --git a/sys/include/net/sock/udp.h b/sys/include/net/sock/udp.h index 191f7e1ac713..769ec0c857f5 100644 --- a/sys/include/net/sock/udp.h +++ b/sys/include/net/sock/udp.h @@ -337,34 +337,19 @@ int sock_udp_create(sock_udp_t *sock, const sock_udp_ep_t *local, /** * @brief Set the event queue for asynchronous events for a UDP sock object * - * @pre `sock == NULL` + * @pre `sock != NULL` * * @note Only one event queue per sock can be set. Since * event_queue_t::waiter only allows for one thread to own the queue. - * This also implies, that **only one thread can execute the event - * handlers** added via @ref sock_udp_set_event_handler()! + * This also implies, that **only one thread can execute the + * @p handler**! * - * @param[in] sock The sock to set the event queue for. May not be `NULL`. - * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] sock The sock to set the event queue for. May not be `NULL`. + * @param[in] queue The queue to set. May be `NULL` to unset the queue. + * @param[in] handler The event handler. May be `NULL` to unset. */ -void sock_udp_set_event_queue(sock_udp_t *sock, event_queue_t *queue); - -/** - * @brief Sets an event handler for asynchronous events of [a certain - * type](@ref sock_event_type_t) for a UDP sock object - * - * @pre `sock != NULL` - * @pre `type < SOCK_EVENT_NUMOF` - * - * @param[in] sock The sock to set the event handler for. May not be - * `NULL` - * @param[in] type The [event type](@ref sock_event_type_t), @p handler - * should handle. Must be < @ref SOCK_EVENT_NUMOF. - * @param[in] handler The event handler for @p type. May be `NULL` to unset - * the event handler for @p type. - */ -void sock_udp_set_event_handler(sock_udp_t *sock, sock_event_type_t *type, - event_handler_t handler); +void sock_udp_set_event_queue(sock_udp_t *sock, event_queue_t *queue, + event_handler_t handler); #endif /** From 6863b4197e15fa71d15d904bd0a20b473450a41c Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Mon, 11 Dec 2017 14:22:14 +0100 Subject: [PATCH 7/7] fixup! sock: extend API for asynchronous event management --- sys/include/net/sock.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/include/net/sock.h b/sys/include/net/sock.h index 336cf5bdeded..13d4c8d5d47c 100644 --- a/sys/include/net/sock.h +++ b/sys/include/net/sock.h @@ -103,7 +103,7 @@ #include -#ifdef MODULE_SOCK_ASYNC && !defined(DOXYGEN) +#if defined(MODULE_SOCK_ASYNC) && !defined(DOXYGEN) #define SOCK_HAS_ASYNC /**< allow sock_async to be defined as a provided * feature of a stack */ #endif @@ -179,7 +179,7 @@ typedef struct { event_t super; /**< event_callback_t structure that gets extended */ void *sock; /**< sock that emitted the event */ uint32_t type; /**< [Event type](@ref net_sock_event_type) flags */ -} sock_event_t +} sock_event_t; #endif /**