|
Ruby 3.4.5p51 (2025-07-16 revision 20cda200d3ce092571d0b5d342dadca69636cb0f)
|
Public APIs to provide rb_fd_select(). More...
#include "ruby/internal/attr/nonnull.h"#include "ruby/internal/attr/pure.h"#include "ruby/internal/dllexport.h"Go to the source code of this file.
Data Structures | |
| struct | rb_fdset_t |
| The data structure which wraps the fd_set bitmap used by select(2). More... | |
Functions | |
| void | rb_fd_init (rb_fdset_t *f) |
| (Re-)initialises a fdset. | |
| void | rb_fd_term (rb_fdset_t *f) |
| Destroys the rb_fdset_t, releasing any memory and resources it used. | |
| void | rb_fd_zero (rb_fdset_t *f) |
| Wipes out the current set of FDs. | |
| void | rb_fd_set (int fd, rb_fdset_t *f) |
| Sets an fd to a fdset. | |
| void | rb_fd_clr (int fd, rb_fdset_t *f) |
| Releases a specific FD from the given fdset. | |
| int | rb_fd_isset (int fd, const rb_fdset_t *f) |
| Queries if the given FD is in the given set. | |
| void | rb_fd_copy (rb_fdset_t *dst, const fd_set *src, int max) |
| Destructively overwrites an fdset with another. | |
| void | rb_fd_dup (rb_fdset_t *dst, const rb_fdset_t *src) |
| Identical to rb_fd_copy(), except it copies unlimited number of file descriptors. | |
| int | rb_fd_select (int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout) |
| Waits for multiple file descriptors at once. | |
| static fd_set * | rb_fd_ptr (const rb_fdset_t *f) |
| Raw pointer to fd_set. | |
| static int | rb_fd_max (const rb_fdset_t *f) |
| It seems this function has no use. | |
Public APIs to provide rb_fd_select().
Several Unix platforms support file descriptors bigger than FD_SETSIZE in select(2) system call.
When fd_set is not big enough to hold big file descriptors, it should be allocated dynamically. Note that this assumes fd_set is structured as bitmap.
rb_fd_init allocates the memory. rb_fd_term frees the memory. rb_fd_set may re-allocate bitmap.
So rb_fd_set doesn't reject file descriptors bigger than FD_SETSIZE.
Definition in file largesize.h.
| void rb_fd_clr | ( | int | fd, |
| rb_fdset_t * | f ) |
Releases a specific FD from the given fdset.
| [in] | fd | Target FD. |
| [out] | f | The fdset that holds fd. |
| void rb_fd_copy | ( | rb_fdset_t * | dst, |
| const fd_set * | src, | ||
| int | max ) |
Destructively overwrites an fdset with another.
| [out] | dst | Target fdset. |
| [in] | src | Source fdset. |
| [in] | max | Maximum number of file descriptors to copy. |
Referenced by rb_fd_copy(), rb_fd_copy(), and rb_fd_copy().
| void rb_fd_dup | ( | rb_fdset_t * | dst, |
| const rb_fdset_t * | src ) |
Identical to rb_fd_copy(), except it copies unlimited number of file descriptors.
| [out] | dst | Target fdset. |
| [in] | src | Source fdset. |
Referenced by rb_fd_dup(), rb_fd_dup(), and rb_fd_dup().
| void rb_fd_init | ( | rb_fdset_t * | f | ) |
(Re-)initialises a fdset.
One must be initialised before other rb_fd_* operations. Analogous to calling malloc(3) to allocate an fd_set.
| [out] | f | An fdset to squash. |
| int rb_fd_isset | ( | int | fd, |
| const rb_fdset_t * | f ) |
Queries if the given FD is in the given set.
| [in] | fd | Target FD. |
| [in] | f | The fdset to scan. |
| 1 | Yes there is. |
| 0 | No there isn't. |
|
inlinestatic |
It seems this function has no use.
Maybe just remove?
| [in] | f | A set. |
Definition at line 209 of file largesize.h.
Referenced by rb_fd_max(), rb_fd_max(), and rb_fd_max().
|
inlinestatic |
Raw pointer to fd_set.
| [in] | f | Target fdset. |
| NULL | f is already terminated by rb_fd_term(). |
| otherwise | Underlying fd_set. |
Definition at line 195 of file largesize.h.
Referenced by rb_fd_ptr(), rb_fd_ptr(), and rb_fd_ptr().
| int rb_fd_select | ( | int | nfds, |
| rb_fdset_t * | rfds, | ||
| rb_fdset_t * | wfds, | ||
| rb_fdset_t * | efds, | ||
| struct timeval * | timeout ) |
Waits for multiple file descriptors at once.
| [in] | nfds | Max FD in everything passed, plus one. |
| [in,out] | rfds | Set of FDs to wait for reads. |
| [in,out] | wfds | Set of FDs to wait for writes. |
| [in,out] | efds | Set of FDs to wait for OOBs. |
| [in,out] | timeout | Max blocking duration. |
| -1 | Failed, errno set. |
| 0 | Timeout exceeded. |
| otherwise | Total number of file descriptors returned. |
| void rb_fd_set | ( | int | fd, |
| rb_fdset_t * | f ) |
Sets an fd to a fdset.
| [in] | fd | A file descriptor. |
| [out] | f | Target fdset. |
| void rb_fd_term | ( | rb_fdset_t * | f | ) |
Destroys the rb_fdset_t, releasing any memory and resources it used.
It must be reinitialised using rb_fd_init() before future use. Analogous to calling free(3) to release memory for an fd_set.
| [out] | f | An fdset to squash. |
Referenced by rb_fd_term().
| void rb_fd_zero | ( | rb_fdset_t * | f | ) |
Wipes out the current set of FDs.
| [out] | f | The fdset to clear. |