Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)
win32.h
Go to the documentation of this file.
1#ifndef RBIMPL_INTERN_SELECT_WIN32_H /*-*-C++-*-vi:se ft=cpp:*/
2#define RBIMPL_INTERN_SELECT_WIN32_H
23#include "ruby/internal/dosish.h" /* for rb_w32_select */
28#include "ruby/assert.h"
29
31#define rb_fd_zero rb_fd_zero
32#define rb_fd_clr rb_fd_clr
33#define rb_fd_isset rb_fd_isset
34#define rb_fd_copy rb_fd_copy
35#define rb_fd_dup rb_fd_dup
36#define rb_fd_ptr rb_fd_ptr
37#define rb_fd_max rb_fd_max
41
42struct timeval;
43
44typedef struct {
45 int capa;
46 fd_set *fdset;
48
51void rb_fd_set(int, rb_fdset_t *);
52void rb_w32_fd_copy(rb_fdset_t *, const fd_set *, int);
53void rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src);
54
56
59static inline void
61{
62 f->fdset->fd_count = 0;
63}
64
66static inline void
67rb_fd_clr(int n, rb_fdset_t *f)
68{
69 rb_w32_fdclr(n, f->fdset);
70}
71
73static inline int
75{
76 return rb_w32_fdisset(n, f->fdset);
77}
78
80static inline void
81rb_fd_copy(rb_fdset_t *dst, const fd_set *src, int n)
82{
83 rb_w32_fd_copy(dst, src, n);
84}
85
87static inline void
88rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src)
89{
90 rb_w32_fd_dup(dst, src);
91}
92
93static inline int
94rb_fd_select(int n, rb_fdset_t *rfds, rb_fdset_t *wfds, rb_fdset_t *efds, struct timeval *timeout)
95{
96 return rb_w32_select(
97 n,
98 rfds ? rfds->fdset : NULL,
99 wfds ? wfds->fdset : NULL,
100 efds ? efds->fdset : NULL,
101 timeout);
102}
103
106/* :TODO: can this function be __attribute__((returns_nonnull)) or not? */
107static inline fd_set *
108rb_fd_ptr(const rb_fdset_t *f)
109{
110 return f->fdset;
111}
112
115static inline int
116rb_fd_max(const rb_fdset_t *f)
117{
118 const fd_set *p = f->fdset;
119
121 return p->fd_count;
122}
123
124#endif /* RBIMPL_INTERN_SELECT_WIN32_H */
#define RBIMPL_ASSERT_OR_ASSUME(expr)
This is either RUBY_ASSERT or RBIMPL_ASSUME, depending on RUBY_DEBUG.
Definition: assert.h:229
Tewaking visibility of C variables/functions.
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
Definition: dllexport.h:86
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
Definition: dllexport.h:77
Support for so-called dosish systems.
void rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src)
Definition: win32.c:2928
void rb_w32_fd_copy(rb_fdset_t *, const fd_set *, int)
Definition: win32.c:2913
Defines RBIMPL_ATTR_NOALIAS.
#define RBIMPL_ATTR_NOALIAS()
Wraps (or simulates) __declspec((noalias))
Definition: noalias.h:55
Defines RBIMPL_ATTR_NONNULL.
#define RBIMPL_ATTR_NONNULL(list)
Wraps (or simulates) __attribute__((nonnull))
Definition: nonnull.h:29
#define rb_fd_isset
Definition: posix.h:41
#define rb_fd_select
Definition: posix.h:43
#define rb_fd_init
Definition: posix.h:42
#define rb_fd_set
Definition: posix.h:39
#define rb_fd_zero
Definition: posix.h:38
#define rb_fd_clr
Definition: posix.h:40
#define rb_fd_term(f)
Definition: posix.h:80
Defines RBIMPL_ATTR_PURE.
#define RBIMPL_ATTR_PURE()
Wraps (or simulates) __attribute__((pure))
Definition: pure.h:33
#define NULL
Definition: regenc.h:69
#define f
#define const
Definition: strftime.c:108
fd_set * fdset
Definition: largesize.h:71
int capa
Definition: win32.h:45
void rb_w32_fdclr(int, fd_set *)
Definition: win32.c:2883
int WSAAPI rb_w32_select(int, fd_set *, fd_set *, fd_set *, struct timeval *)
Definition: win32.c:3306
int rb_w32_fdisset(int, fd_set *)
Definition: win32.c:2901