LCOV - code coverage report
Current view: top level - zephyr/net - socket_select.h Coverage Total Hit
Test: new.info Lines: 100.0 % 8 8
Test Date: 2025-09-05 22:20:39

            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 2.0-1