LCOV - code coverage report
Current view: top level - zephyr/net - socket_select.h Hit Total Coverage
Test: new.info Lines: 8 8 100.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /*
       2             :  * Copyright (c) 2019 Linaro Limited
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : /** @file socket_select.h
       8             :  *
       9             :  * @brief BSD select support functions.
      10             :  */
      11             : 
      12             : #ifndef ZEPHYR_INCLUDE_NET_SOCKET_SELECT_H_
      13             : #define ZEPHYR_INCLUDE_NET_SOCKET_SELECT_H_
      14             : 
      15             : /**
      16             :  * @brief BSD Sockets compatible API
      17             :  * @defgroup bsd_sockets BSD Sockets compatible API
      18             :  * @ingroup networking
      19             :  * @{
      20             :  */
      21             : 
      22             : #include <time.h>
      23             : 
      24             : #include <zephyr/toolchain.h>
      25             : #include <zephyr/net/socket_types.h>
      26             : #include <zephyr/sys/fdtable.h>
      27             : 
      28             : #ifdef __cplusplus
      29             : extern "C" {
      30             : #endif
      31             : 
      32             : /** Socket file descriptor set. */
      33           1 : typedef struct zvfs_fd_set zsock_fd_set;
      34             : 
      35             : /**
      36             :  * @brief Legacy function to poll multiple sockets for events
      37             :  *
      38             :  * @details
      39             :  * See POSIX.1-2017 article
      40             :  * http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html
      41             :  * for normative description. This function is provided to ease porting of
      42             :  * existing code and not recommended for usage due to its inefficiency,
      43             :  * use zsock_poll() instead. In Zephyr this function works only with
      44             :  * sockets, not arbitrary file descriptors.
      45             :  * This function is also exposed as `select()`
      46             :  * if @kconfig{CONFIG_POSIX_API} is defined (in which case
      47             :  * it may conflict with generic POSIX `select()` function).
      48             :  */
      49           1 : static inline int zsock_select(int nfds, zsock_fd_set *readfds, zsock_fd_set *writefds,
      50             :                                zsock_fd_set *exceptfds, struct zsock_timeval *timeout)
      51             : {
      52             :         struct timespec to = {
      53             :                 .tv_sec = (timeout == NULL) ? 0 : timeout->tv_sec,
      54             :                 .tv_nsec = (long)((timeout == NULL) ? 0 : timeout->tv_usec * NSEC_PER_USEC)};
      55             : 
      56             :         return zvfs_select(nfds, readfds, writefds, exceptfds, (timeout == NULL) ? NULL : &to,
      57             :                            NULL);
      58             : }
      59             : 
      60             : /** Number of file descriptors which can be added to zsock_fd_set */
      61           1 : #define ZSOCK_FD_SETSIZE ZVFS_FD_SETSIZE
      62             : 
      63             : /**
      64             :  * @brief Initialize (clear) fd_set
      65             :  *
      66             :  * @details
      67             :  * See POSIX.1-2017 article
      68             :  * http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html
      69             :  * for normative description.
      70             :  * This function is also exposed as `FD_ZERO()`
      71             :  * if @kconfig{CONFIG_POSIX_API} is defined.
      72             :  */
      73           1 : static inline void ZSOCK_FD_ZERO(zsock_fd_set *set)
      74             : {
      75             :         ZVFS_FD_ZERO(set);
      76             : }
      77             : 
      78             : /**
      79             :  * @brief Check whether socket is a member of fd_set
      80             :  *
      81             :  * @details
      82             :  * See POSIX.1-2017 article
      83             :  * http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html
      84             :  * for normative description.
      85             :  * This function is also exposed as `FD_ISSET()`
      86             :  * if @kconfig{CONFIG_POSIX_API} is defined.
      87             :  */
      88           1 : static inline int ZSOCK_FD_ISSET(int fd, zsock_fd_set *set)
      89             : {
      90             :         return ZVFS_FD_ISSET(fd, set);
      91             : }
      92             : 
      93             : /**
      94             :  * @brief Remove socket from fd_set
      95             :  *
      96             :  * @details
      97             :  * See POSIX.1-2017 article
      98             :  * http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html
      99             :  * for normative description.
     100             :  * This function is also exposed as `FD_CLR()`
     101             :  * if @kconfig{CONFIG_POSIX_API} is defined.
     102             :  */
     103           1 : static inline void ZSOCK_FD_CLR(int fd, zsock_fd_set *set)
     104             : {
     105             :         ZVFS_FD_CLR(fd, set);
     106             : }
     107             : 
     108             : /**
     109             :  * @brief Add socket to fd_set
     110             :  *
     111             :  * @details
     112             :  * See POSIX.1-2017 article
     113             :  * http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html
     114             :  * for normative description.
     115             :  * This function is also exposed as `FD_SET()`
     116             :  * if @kconfig{CONFIG_POSIX_API} is defined.
     117             :  */
     118           1 : static inline void ZSOCK_FD_SET(int fd, zsock_fd_set *set)
     119             : {
     120             :         ZVFS_FD_SET(fd, set);
     121             : }
     122             : 
     123             : #ifdef __cplusplus
     124             : }
     125             : #endif
     126             : 
     127             : /**
     128             :  * @}
     129             :  */
     130             : 
     131             : #endif /* ZEPHYR_INCLUDE_NET_SOCKET_SELECT_H_ */

Generated by: LCOV version 1.14