mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
include/ruby/internal/intern/select.h: add doxygen
Must not be a bad idea to improve documents. [ci skip]
This commit is contained in:
parent
29201e1ad2
commit
4625ab88e2
Notes:
git
2021-09-10 20:01:35 +09:00
1 changed files with 35 additions and 1 deletions
|
@ -35,9 +35,11 @@
|
||||||
# include "ruby/internal/intern/select/largesize.h"
|
# include "ruby/internal/intern/select/largesize.h"
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
# include "ruby/internal/intern/select/win32.h"
|
# include "ruby/internal/intern/select/win32.h"
|
||||||
|
# /** Does nothing (defined for compatibility). */
|
||||||
# define rb_fd_resize(n, f) ((void)(f))
|
# define rb_fd_resize(n, f) ((void)(f))
|
||||||
#else
|
#else
|
||||||
# include "ruby/internal/intern/select/posix.h"
|
# include "ruby/internal/intern/select/posix.h"
|
||||||
|
# /** Does nothing (defined for compatibility). */
|
||||||
# define rb_fd_resize(n, f) ((void)(f))
|
# define rb_fd_resize(n, f) ((void)(f))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -45,7 +47,39 @@ RBIMPL_SYMBOL_EXPORT_BEGIN()
|
||||||
|
|
||||||
struct timeval;
|
struct timeval;
|
||||||
|
|
||||||
int rb_thread_fd_select(int, rb_fdset_t *, rb_fdset_t *, rb_fdset_t *, struct timeval *);
|
/**
|
||||||
|
* Waits for multiple file descriptors at once. This is basically a wrapper of
|
||||||
|
* system-provided select() with releasing GVL, to allow other Ruby threads run
|
||||||
|
* in parallel.
|
||||||
|
*
|
||||||
|
* @param[in] nfds Max FD in everything passed, plus one.
|
||||||
|
* @param[in,out] rfds Set of FDs to wait for reads.
|
||||||
|
* @param[in,out] wfds Set of FDs to wait for writes.
|
||||||
|
* @param[in,out] efds Set of FDs to wait for OOBs.
|
||||||
|
* @param[in,out] timeout Max blocking duration.
|
||||||
|
* @retval -1 Failed, errno set.
|
||||||
|
* @retval 0 Timeout exceeded.
|
||||||
|
* @retval otherwise Total number of file descriptors returned.
|
||||||
|
* @post `rfds` contains readable FDs.
|
||||||
|
* @post `wfds` contains writable FDs.
|
||||||
|
* @post `efds` contains exceptional FDs.
|
||||||
|
* @post `timeout` is the time left.
|
||||||
|
* @note All pointers are allowed to be null pointers.
|
||||||
|
*
|
||||||
|
* Although backend threads can run in parallel of this function, touching a
|
||||||
|
* file descriptor from multiple threads could be problematic. For instance
|
||||||
|
* what happens when a thread closes a file descriptor that is selected by
|
||||||
|
* someone else, vastly varies among operating systems. You would better avoid
|
||||||
|
* touching an fd from more than one threads.
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*
|
||||||
|
* Although any file descriptors are possible here, it makes completely no
|
||||||
|
* sense to pass a descriptor that is not `O_NONBLOCK`. If you want to know
|
||||||
|
* the reason for this limitatuon in detail, you might find this thread super
|
||||||
|
* interesting: https://lkml.org/lkml/2004/10/6/117
|
||||||
|
*/
|
||||||
|
int rb_thread_fd_select(int nfds, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout);
|
||||||
|
|
||||||
RBIMPL_SYMBOL_EXPORT_END()
|
RBIMPL_SYMBOL_EXPORT_END()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue