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. |