]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libbegemot/rpoll.man
This commit was generated by cvs2svn to compensate for changes in r155290,
[FreeBSD/FreeBSD.git] / contrib / libbegemot / rpoll.man
1 '\"
2 '\" Copyright (c)1996-2002 by Hartmut Brandt
3 '\"     All rights reserved.
4 '\"
5 '\" Author: Hartmut Brandt
6 '\"
7 '\" Redistribution of this software and documentation and use in source and
8 '\" binary forms, with or without modification, are permitted provided that
9 '\" the following conditions are met:
10 '\" 
11 '\" 1. Redistributions of source code or documentation must retain the above
12 '\"   copyright notice, this list of conditions and the following disclaimer.
13 '\" 2. Redistributions in binary form must reproduce the above copyright
14 '\"   notice, this list of conditions and the following disclaimer in the
15 '\"   documentation and/or other materials provided with the distribution.
16 '\"
17 '\" THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE AUTHOR 
18 '\" AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
19 '\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 '\" FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
21 '\" THE AUTHOR OR ITS CONTRIBUTORS  BE LIABLE FOR ANY DIRECT, INDIRECT,
22 '\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 '\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
24 '\" OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25 '\" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26 '\" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
27 '\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 '\"
29 '\" $Begemot: libbegemot/rpoll.man,v 1.4 2004/09/21 15:59:00 brandt Exp $
30 '\"
31 .TH rpoll l "21 Oct 1996" "BEGEMOT" "BEGEMOT Library"
32 .SH NAME
33 rpoll - callback functions for file descriptors and timers
34 .SH SYNOPSIS
35 .LP
36 .B "# include <rpoll.h>"
37 .LP
38 .BR "typedef void (*poll_f)(int " "fd" ", int " "mask" ", void *" "arg);"
39 .br
40 .BR "typedef void (*timer_f)(int " "tid" ", void *" "arg);"
41 .LP
42 .BR "int poll_register(int " "fd" ", poll_f "
43 .RB "func" ", void *" "arg" ", int " "mask" ");"
44 .LP
45 .BR "void poll_unregister(int " "handle" ");"
46 .LP
47 .BR "int poll_start_timer(u_int " "msecs" ", int " "repeat" ", timer_f " "func,"
48 .if n .ti +.5i
49 .BR "void *" "arg);"
50 .LP
51 .BR "void poll_stop_timer(int " "handle" ");"
52 .LP
53 .BR "void poll_dispatch(int " "wait" ");"
54 .SH DESCRIPTION
55 Many programs need to read from several file descriptors at the same time.
56 Typically in these programs one of
57 .BR select (3c)
58 or
59 .BR poll (2)
60 is used.
61 These calls are however clumsy to use and the usage of one of these calls is
62 probably not portable to other systems - not all systems support both calls.
63 .LP
64 The
65 .BR rpoll (l)
66 family of functions is designed to overcome these restrictions.
67 They support the well known and understood technique of event driven
68 programing and, in addition to
69 .BR select (3c)
70 and
71 .BR poll (2)
72 also support timers.
73 .LP
74 Each event on a file descriptor or each timer event is translated into a call to a user
75 defined callback function. These functions need to be registered.
76 A file descriptor is registered with
77 .BR poll_register .
78 .I fd
79 is the file descriptor to watch,
80 .I mask
81 is an event mask.
82 It may be any combination of
83 .B POLL_IN
84 to get informed, when input on the file descriptor is possible,
85 .B POLL_OUT
86 to get informed, when output is possible or
87 .B POLL_EXCEPT
88 to get informed, when an exceptional condition occures.
89 An example of an exceptional condition is the arrival of urgent data.
90 (Note, that an end of file condition is signaled via POLL_IN).
91 .I func
92 is the user function to be called and
93 .I arg
94 is a user supplied argument for this function.
95 The callback functions is called with the file descriptor, a mask
96 describing the actual events (from the set supplied in the registration) and
97 the user argument.
98 .B poll_register
99 returns a handle, which may be used later to de-register the file descriptor.
100 A file descriptor may be registered more than once, if the function, the user arguments
101 or both differ in the call to
102 .BR poll_register .
103 If
104 .I func
105 and
106 .I arg
107 are the same, then no new registration is done, instead the event mask of the registration
108 is changed to reflect the new mask.
109 .LP
110 A registered file descriptor may be de-registered by calling
111 .B poll_unregister
112 with the handle returned by
113 .BR poll_register .
114 .LP
115 A timer is created with
116 .BR poll_start_timer .
117 .I msecs
118 is the number of milliseconds, after which the timer event will be generated.
119 .I repeat
120 selects one-short behavior (if 0) or a repeatable timer (if not 0). A one-short timer
121 will automatically unregistered after expiry.
122 .I func
123 is the user function which will be called with a timer id and the user supplied
124 .IR arg .
125 .B poll_start_timer
126 returnes a timer id, which may be used to cancel the timer with
127 .BR poll_stop_timer .
128 A one-short timer should be canceled only if it has not yet fired.
129 .LP
130 .B poll_dispatch
131 must be called to actually dispatch events. 
132 .I wait
133 is a flag, which should be 0, if only a poll should be done. In this case, the function returns,
134 after polling the registered file descriptors and timers. If
135 .I wait
136 is not 0,
137 .B poll_dispatch
138 waits until an event occures. All events are dispatch (i.e. callback functions called) and
139 .B poll_dispatch returns.
140 .LP
141 Typical use is:
142 .LP
143 .RS
144 .nf
145 .ft 3
146 while(1)
147         poll_dispatch(1);
148 .ft 1
149 .fi
150 .RE
151 .SH "SEE ALSO"
152 .BR poll (2), select (3C)
153 .SH "RETURN VALUES"
154 .B poll_register
155 and
156 .B poll_start_timer
157 return a handle which may be used to unregister the file descriptor or cancel the timer.
158 .LP
159 Both functions and
160 .B poll_dispatch
161 call
162 .BR xrealloc (l)
163 and can end in
164 .BR panic (l).
165 .SH "ERRORS"
166 System call or memory allocation errors are fatal and are handle by calling
167 .BR panic (l).
168 The one exception is a return of EINTR from
169 .BR select (3c)
170 or
171 .BR poll (2)
172 in
173 .BR poll_dispatch .
174 In this case
175 .B poll_dispatch
176 simply returns.
177 .SH "BUGS"
178 Obscure sequences of
179 .B poll_start_timer
180 and
181 .B poll_stop_timer
182 in callback functions may probably break the code.
183 .LP
184 The semantics of
185 .B POLL_EXCEPT
186 are not clear.
187 .SH AUTHORS
188 Hartmut Brandt, harti@freebsd.org