| #pragma once |
| |
| #include <osmocom/core/linuxlist.h> |
| |
| /*! \defgroup select Select loop abstraction |
| * @{ |
| */ |
| |
| /*! \file select.h |
| * \brief select loop abstraction |
| */ |
| |
| /*! \brief Indicate interest in reading from the file descriptor */ |
| #define BSC_FD_READ 0x0001 |
| /*! \brief Indicate interest in writing to the file descriptor */ |
| #define BSC_FD_WRITE 0x0002 |
| /*! \brief Indicate interest in exceptions from the file descriptor */ |
| #define BSC_FD_EXCEPT 0x0004 |
| |
| /*! \brief Structure representing a file dsecriptor */ |
| struct osmo_fd { |
| /*! linked list for internal management */ |
| struct llist_head list; |
| /*! actual operating-system level file decriptor */ |
| int fd; |
| /*! bit-mask or of \ref BSC_FD_READ, \ref BSC_FD_WRITE and/or |
| * \ref BSC_FD_EXCEPT */ |
| unsigned int when; |
| /*! call-back function to be called once file descriptor becomes |
| * available */ |
| int (*cb)(struct osmo_fd *fd, unsigned int what); |
| /*! data pointer passed through to call-back function */ |
| void *data; |
| /*! private number, extending \a data */ |
| unsigned int priv_nr; |
| }; |
| |
| int osmo_fd_register(struct osmo_fd *fd); |
| void osmo_fd_unregister(struct osmo_fd *fd); |
| int osmo_select_main(int polling); |
| |
| struct osmo_fd *osmo_fd_get_by_fd(int fd); |
| |
| /* |
| * foreign event loop integration |
| */ |
| int osmo_fd_fill_fds(void *readset, void *writeset, void *exceptset); |
| int osmo_fd_disp_fds(void *readset, void *writeset, void *exceptset); |
| |
| /*! @} */ |