]>
Commit | Line | Data |
---|---|---|
b4fa8164 CF |
1 | /* select.h |
2 | ||
bc837d22 | 3 | Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, |
61522196 | 4 | 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc. |
b4fa8164 CF |
5 | |
6 | This file is part of Cygwin. | |
7 | ||
8 | This software is a copyrighted work licensed under the terms of the | |
9 | Cygwin license. Please consult the file "CYGWIN_LICENSE" for | |
10 | details. */ | |
11 | ||
12 | #ifndef _SELECT_H_ | |
13 | #define _SELECT_H_ | |
14 | ||
15 | struct select_record | |
16 | { | |
17 | int fd; | |
18 | HANDLE h; | |
19 | fhandler_base *fh; | |
20 | int thread_errno; | |
21 | bool windows_handle; | |
22 | bool read_ready, write_ready, except_ready; | |
23 | bool read_selected, write_selected, except_selected; | |
24 | bool except_on_write; | |
4a84997a | 25 | int (*startup) (select_record *, class select_stuff *); |
b4fa8164 | 26 | int (*peek) (select_record *, bool); |
4a84997a CF |
27 | int (*verify) (select_record *, fd_set *, fd_set *, fd_set *); |
28 | void (*cleanup) (select_record *, class select_stuff *); | |
b4fa8164 CF |
29 | struct select_record *next; |
30 | void set_select_errno () {__seterrno (); thread_errno = errno;} | |
31 | int saw_error () {return thread_errno;} | |
081e9da6 CF |
32 | select_record (int): next (NULL) {} |
33 | select_record (): fd (0), h (NULL), fh (NULL), thread_errno (0), | |
b4fa8164 CF |
34 | windows_handle (false), read_ready (false), write_ready (false), |
35 | except_ready (false), read_selected (false), write_selected (false), | |
36 | except_selected (false), except_on_write (false), | |
37 | startup (NULL), peek (NULL), verify (NULL), cleanup (NULL), | |
38 | next (NULL) {} | |
4a84997a CF |
39 | #ifdef DEBUGGING |
40 | void dump_select_record (); | |
41 | #endif | |
b4fa8164 CF |
42 | }; |
43 | ||
44 | struct select_info | |
45 | { | |
46 | cygthread *thread; | |
47 | bool stop_thread; | |
48 | select_record *start; | |
4a84997a | 49 | select_info (): thread (NULL), stop_thread (0), start (NULL) {} |
b4fa8164 CF |
50 | }; |
51 | ||
52 | struct select_pipe_info: public select_info | |
53 | { | |
4a84997a | 54 | select_pipe_info (): select_info () {} |
b4fa8164 CF |
55 | }; |
56 | ||
57 | struct select_socket_info: public select_info | |
58 | { | |
b4fa8164 CF |
59 | int num_w4; |
60 | LONG *ser_num; | |
61 | HANDLE *w4; | |
4ddb658e | 62 | select_socket_info (): select_info (), num_w4 (0), ser_num (0), w4 (NULL) {} |
b4fa8164 CF |
63 | }; |
64 | ||
65 | struct select_serial_info: public select_info | |
66 | { | |
4a84997a | 67 | select_serial_info (): select_info () {} |
b4fa8164 CF |
68 | }; |
69 | ||
70 | struct select_mailslot_info: public select_info | |
71 | { | |
4a84997a | 72 | select_mailslot_info (): select_info () {} |
b4fa8164 CF |
73 | }; |
74 | ||
75 | class select_stuff | |
76 | { | |
77 | public: | |
45b61a88 CF |
78 | enum wait_states |
79 | { | |
45b61a88 CF |
80 | select_signalled = -3, |
81 | select_loop = -2, | |
82 | select_error = -1, | |
83 | select_ok = 0, | |
84 | select_set_zero = 1 | |
85 | }; | |
86 | ||
b4fa8164 | 87 | ~select_stuff (); |
ad87edbe | 88 | bool return_on_signal; |
b4fa8164 CF |
89 | bool always_ready, windows_used; |
90 | select_record start; | |
91 | ||
92 | select_pipe_info *device_specific_pipe; | |
93 | select_socket_info *device_specific_socket; | |
94 | select_serial_info *device_specific_serial; | |
95 | select_mailslot_info *device_specific_mailslot; | |
96 | ||
4a84997a CF |
97 | bool test_and_set (int, fd_set *, fd_set *, fd_set *); |
98 | int poll (fd_set *, fd_set *, fd_set *); | |
99 | wait_states wait (fd_set *, fd_set *, fd_set *, DWORD); | |
b4fa8164 | 100 | void cleanup (); |
781822a6 | 101 | void destroy (); |
45b61a88 | 102 | |
ad87edbe CF |
103 | select_stuff (): return_on_signal (false), always_ready (false), |
104 | windows_used (false), start (0), | |
b052bf26 CF |
105 | device_specific_pipe (NULL), |
106 | device_specific_socket (NULL), | |
107 | device_specific_serial (NULL), | |
108 | device_specific_mailslot (NULL) {} | |
b4fa8164 CF |
109 | }; |
110 | #endif /* _SELECT_H_ */ |