]> sourceware.org Git - newlib-cygwin.git/blame - winsup/cygwin/select.h
* Merge in cygwin-64bit-branch.
[newlib-cygwin.git] / winsup / cygwin / select.h
CommitLineData
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
6This file is part of Cygwin.
7
8This software is a copyrighted work licensed under the terms of the
9Cygwin license. Please consult the file "CYGWIN_LICENSE" for
10details. */
11
12#ifndef _SELECT_H_
13#define _SELECT_H_
14
15struct 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
44struct 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
52struct select_pipe_info: public select_info
53{
4a84997a 54 select_pipe_info (): select_info () {}
b4fa8164
CF
55};
56
57struct 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
65struct select_serial_info: public select_info
66{
4a84997a 67 select_serial_info (): select_info () {}
b4fa8164
CF
68};
69
70struct select_mailslot_info: public select_info
71{
4a84997a 72 select_mailslot_info (): select_info () {}
b4fa8164
CF
73};
74
75class select_stuff
76{
77public:
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_ */
This page took 0.177248 seconds and 5 git commands to generate.