Ruby 3.5.0dev (2025-02-22 revision b17f984e4e903d3ece3013c1488279d1947dfc39)
|
Public APIs to provide rb_fd_select(). More...
#include "ruby/internal/dosish.h"
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/attr/pure.h"
#include "ruby/internal/attr/noalias.h"
#include "ruby/internal/dllexport.h"
#include "ruby/assert.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_set (int fd, rb_fdset_t *f) |
Sets an fd to a fdset. | |
void | rb_w32_fd_copy (rb_fdset_t *dst, const fd_set *src, int max) |
Destructively overwrites an fdset with another. | |
void | rb_w32_fd_dup (rb_fdset_t *dst, const rb_fdset_t *src) |
Identical to rb_w32_fd_copy(), except it copies unlimited number of file descriptors. | |
static void | rb_fd_zero (rb_fdset_t *f) |
Wipes out the current set of FDs. | |
static void | rb_fd_clr (int n, rb_fdset_t *f) |
Releases a specific FD from the given fdset. | |
static int | rb_fd_isset (int n, rb_fdset_t *f) |
Queries if the given FD is in the given set. | |
static void | rb_fd_copy (rb_fdset_t *dst, const fd_set *src, int n) |
Destructively overwrites an fdset with another. | |
static 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. | |
static int | rb_fd_select (int n, 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().
RBIMPL
or rbimpl
are implementation details. Don't take them as canon. They could rapidly appear then vanish. The name (path) of this header file is also an implementation detail. Do not expect it to persist at the place it is now. Developers are free to move it anywhere anytime at will. __VA_ARGS__
is always available. We assume C99 for ruby itself but we don't assume languages of extension libraries. They could be written in C++98. Definition in file win32.h.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Identical to rb_fd_copy(), except it copies unlimited number of file descriptors.
[out] | dst | Target fdset. |
[in] | src | Source fdset. |
dst
is a copy of src
. 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. |
f
holds no file descriptors.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Raw pointer to fd_set
.
[in] | f | Target fdset. |
NULL | f is already terminated by rb_fd_term(). |
otherwise | Underlying fd_set. |
|
inlinestatic |
Waits for multiple file descriptors at once.
[in] | n | 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. |
rfds
contains readable FDs. wfds
contains writable FDs. efds
contains exceptional FDs. timeout
is the time left. 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. |
f
holds fd
. 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. |
f
holds no file descriptors.
|
inlinestatic |
void rb_w32_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. |
dst
is a copy of src
. Definition at line 2941 of file win32.c.
Referenced by rb_fd_copy(), and rb_w32_fd_copy().
void rb_w32_fd_dup | ( | rb_fdset_t * | dst, |
const rb_fdset_t * | src | ||
) |
Identical to rb_w32_fd_copy(), except it copies unlimited number of file descriptors.
[out] | dst | Target fdset. |
[in] | src | Source fdset. |
dst
is a copy of src
. Definition at line 2956 of file win32.c.
Referenced by rb_fd_dup(), and rb_w32_fd_dup().