File: Unixqueue.event_system.html

package info (click to toggle)
ocamlnet 2.2.9-8
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 17,724 kB
  • ctags: 10,053
  • sloc: ml: 63,928; ansic: 1,973; makefile: 800; sh: 651
file content (185 lines) | stat: -rw-r--r-- 15,030 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<link rel="Start" href="index.html">
<link rel="Up" href="Unixqueue.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of class attributes" rel=Appendix href="index_attributes.html">
<link title="Index of class methods" rel=Appendix href="index_methods.html">
<link title="Index of classes" rel=Appendix href="index_classes.html">
<link title="Index of class types" rel=Appendix href="index_class_types.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Index of module types" rel=Appendix href="index_module_types.html">
<link title="Uq_gtk" rel="Chapter" href="Uq_gtk.html">
<link title="Equeue" rel="Chapter" href="Equeue.html">
<link title="Unixqueue" rel="Chapter" href="Unixqueue.html">
<link title="Uq_engines" rel="Chapter" href="Uq_engines.html">
<link title="Uq_socks5" rel="Chapter" href="Uq_socks5.html">
<link title="Unixqueue_mt" rel="Chapter" href="Unixqueue_mt.html">
<link title="Equeue_intro" rel="Chapter" href="Equeue_intro.html">
<link title="Uq_ssl" rel="Chapter" href="Uq_ssl.html">
<link title="Uq_tcl" rel="Chapter" href="Uq_tcl.html">
<link title="Netcgi_common" rel="Chapter" href="Netcgi_common.html">
<link title="Netcgi" rel="Chapter" href="Netcgi.html">
<link title="Netcgi_ajp" rel="Chapter" href="Netcgi_ajp.html">
<link title="Netcgi_scgi" rel="Chapter" href="Netcgi_scgi.html">
<link title="Netcgi_cgi" rel="Chapter" href="Netcgi_cgi.html">
<link title="Netcgi_fcgi" rel="Chapter" href="Netcgi_fcgi.html">
<link title="Netcgi_dbi" rel="Chapter" href="Netcgi_dbi.html">
<link title="Netcgi1_compat" rel="Chapter" href="Netcgi1_compat.html">
<link title="Netcgi_test" rel="Chapter" href="Netcgi_test.html">
<link title="Netcgi_porting" rel="Chapter" href="Netcgi_porting.html">
<link title="Netcgi_plex" rel="Chapter" href="Netcgi_plex.html">
<link title="Http_client" rel="Chapter" href="Http_client.html">
<link title="Telnet_client" rel="Chapter" href="Telnet_client.html">
<link title="Ftp_data_endpoint" rel="Chapter" href="Ftp_data_endpoint.html">
<link title="Ftp_client" rel="Chapter" href="Ftp_client.html">
<link title="Nethttpd_types" rel="Chapter" href="Nethttpd_types.html">
<link title="Nethttpd_kernel" rel="Chapter" href="Nethttpd_kernel.html">
<link title="Nethttpd_reactor" rel="Chapter" href="Nethttpd_reactor.html">
<link title="Nethttpd_engine" rel="Chapter" href="Nethttpd_engine.html">
<link title="Nethttpd_services" rel="Chapter" href="Nethttpd_services.html">
<link title="Nethttpd_plex" rel="Chapter" href="Nethttpd_plex.html">
<link title="Nethttpd_intro" rel="Chapter" href="Nethttpd_intro.html">
<link title="Netplex_types" rel="Chapter" href="Netplex_types.html">
<link title="Netplex_mp" rel="Chapter" href="Netplex_mp.html">
<link title="Netplex_mt" rel="Chapter" href="Netplex_mt.html">
<link title="Netplex_log" rel="Chapter" href="Netplex_log.html">
<link title="Netplex_controller" rel="Chapter" href="Netplex_controller.html">
<link title="Netplex_container" rel="Chapter" href="Netplex_container.html">
<link title="Netplex_sockserv" rel="Chapter" href="Netplex_sockserv.html">
<link title="Netplex_workload" rel="Chapter" href="Netplex_workload.html">
<link title="Netplex_main" rel="Chapter" href="Netplex_main.html">
<link title="Netplex_config" rel="Chapter" href="Netplex_config.html">
<link title="Netplex_kit" rel="Chapter" href="Netplex_kit.html">
<link title="Rpc_netplex" rel="Chapter" href="Rpc_netplex.html">
<link title="Netplex_cenv" rel="Chapter" href="Netplex_cenv.html">
<link title="Netplex_intro" rel="Chapter" href="Netplex_intro.html">
<link title="Netshm" rel="Chapter" href="Netshm.html">
<link title="Netshm_data" rel="Chapter" href="Netshm_data.html">
<link title="Netshm_hashtbl" rel="Chapter" href="Netshm_hashtbl.html">
<link title="Netshm_array" rel="Chapter" href="Netshm_array.html">
<link title="Netshm_intro" rel="Chapter" href="Netshm_intro.html">
<link title="Netconversion" rel="Chapter" href="Netconversion.html">
<link title="Netchannels" rel="Chapter" href="Netchannels.html">
<link title="Netstream" rel="Chapter" href="Netstream.html">
<link title="Mimestring" rel="Chapter" href="Mimestring.html">
<link title="Netmime" rel="Chapter" href="Netmime.html">
<link title="Netsendmail" rel="Chapter" href="Netsendmail.html">
<link title="Neturl" rel="Chapter" href="Neturl.html">
<link title="Netaddress" rel="Chapter" href="Netaddress.html">
<link title="Netbuffer" rel="Chapter" href="Netbuffer.html">
<link title="Netdate" rel="Chapter" href="Netdate.html">
<link title="Netencoding" rel="Chapter" href="Netencoding.html">
<link title="Netulex" rel="Chapter" href="Netulex.html">
<link title="Netaccel" rel="Chapter" href="Netaccel.html">
<link title="Netaccel_link" rel="Chapter" href="Netaccel_link.html">
<link title="Nethtml" rel="Chapter" href="Nethtml.html">
<link title="Netstring_str" rel="Chapter" href="Netstring_str.html">
<link title="Netstring_pcre" rel="Chapter" href="Netstring_pcre.html">
<link title="Netstring_mt" rel="Chapter" href="Netstring_mt.html">
<link title="Netmappings" rel="Chapter" href="Netmappings.html">
<link title="Netaux" rel="Chapter" href="Netaux.html">
<link title="Nethttp" rel="Chapter" href="Nethttp.html">
<link title="Netchannels_tut" rel="Chapter" href="Netchannels_tut.html">
<link title="Netmime_tut" rel="Chapter" href="Netmime_tut.html">
<link title="Netsendmail_tut" rel="Chapter" href="Netsendmail_tut.html">
<link title="Netulex_tut" rel="Chapter" href="Netulex_tut.html">
<link title="Neturl_tut" rel="Chapter" href="Neturl_tut.html">
<link title="Netsys" rel="Chapter" href="Netsys.html">
<link title="Netpop" rel="Chapter" href="Netpop.html">
<link title="Rpc_auth_dh" rel="Chapter" href="Rpc_auth_dh.html">
<link title="Rpc_key_service" rel="Chapter" href="Rpc_key_service.html">
<link title="Rpc_time" rel="Chapter" href="Rpc_time.html">
<link title="Rpc_auth_local" rel="Chapter" href="Rpc_auth_local.html">
<link title="Rtypes" rel="Chapter" href="Rtypes.html">
<link title="Xdr" rel="Chapter" href="Xdr.html">
<link title="Rpc" rel="Chapter" href="Rpc.html">
<link title="Rpc_program" rel="Chapter" href="Rpc_program.html">
<link title="Rpc_portmapper_aux" rel="Chapter" href="Rpc_portmapper_aux.html">
<link title="Rpc_packer" rel="Chapter" href="Rpc_packer.html">
<link title="Rpc_transport" rel="Chapter" href="Rpc_transport.html">
<link title="Rpc_client" rel="Chapter" href="Rpc_client.html">
<link title="Rpc_simple_client" rel="Chapter" href="Rpc_simple_client.html">
<link title="Rpc_portmapper_clnt" rel="Chapter" href="Rpc_portmapper_clnt.html">
<link title="Rpc_portmapper" rel="Chapter" href="Rpc_portmapper.html">
<link title="Rpc_server" rel="Chapter" href="Rpc_server.html">
<link title="Rpc_auth_sys" rel="Chapter" href="Rpc_auth_sys.html">
<link title="Rpc_intro" rel="Chapter" href="Rpc_intro.html">
<link title="Rpc_mapping_ref" rel="Chapter" href="Rpc_mapping_ref.html">
<link title="Rpc_ssl" rel="Chapter" href="Rpc_ssl.html">
<link title="Rpc_xti_client" rel="Chapter" href="Rpc_xti_client.html">
<link title="Shell_sys" rel="Chapter" href="Shell_sys.html">
<link title="Shell" rel="Chapter" href="Shell.html">
<link title="Shell_uq" rel="Chapter" href="Shell_uq.html">
<link title="Shell_mt" rel="Chapter" href="Shell_mt.html">
<link title="Shell_intro" rel="Chapter" href="Shell_intro.html">
<link title="Netsmtp" rel="Chapter" href="Netsmtp.html"><title>Ocamlnet 2 Reference Manual : Unixqueue.event_system</title>
</head>
<body>
<div class="navbar">&nbsp;<a href="Unixqueue.html">Up</a>
&nbsp;</div>
<center><h1>Class type <a href="type_Unixqueue.event_system.html">Unixqueue.event_system</a></h1></center>
<br>
<pre><span class="keyword">class type</span> <a name="TYPEevent_system"></a>event_system = <code class="code">object</code> <a href="Unixqueue.event_system.html">..</a> <code class="code">end</code></pre>The <code class="code">event_system</code> manages events, handlers, resources, groups,
 etc. It is now a class type, and you may invoke the operations directly
 for the class. The operations are still available as functions (below).
<p>

 A <b>resource</b> is an operation with an optional timer. The operation
 describes the condition to watch for, and the timer defines the
 maximum period of time for that. If the condition becomes true,
 an <code class="code">Input_arrived</code>, <code class="code">Output_readiness</code>, or <code class="code">Out_of_band</code> event
 will be triggered. If the timer expires, a <code class="code">Timeout</code> event will be
 generated. After the event the resource remains active, and the
 timeout period begins anew.
<p>

 A resource is usually bound to a file descriptor. It is allowed
 to watch the same descriptor for several different conditions,
 but it is forbidden to watch the same descriptor for the same kind
 of condition several times.
<p>

 As a special case, the operation <code class="code">Wait</code> is not bound to a
 file descriptor, but simply starts a timer. The argument of <code class="code">Wait</code>
 can be used to distinguish between several timers that are active
 at the same time.
<p>

 <b>Event handlers</b> get the events one after the other, and 
 process them. When a handler is called for an event, there are
 several possible reactions: (1) The handler can return normally,
 which means that the event has been accepted, and will not be
 passed to any other handler. (2) The handler can raise
 <a href="Equeue.html#EXCEPTIONReject"><code class="code">Equeue.Reject</code></a>, which means that the handler cannot process
 the event, and that another handler should get it. (3) The handler
 can raise <a href="Equeue.html#EXCEPTIONTerminate"><code class="code">Equeue.Terminate</code></a> which means that the event has been
 accepted, and that the handler is terminated (it will never be
 called again). (4) The handler can raise <code class="code">Abort</code> which means that
 the event is deferred, and that a special abort mechanism is
 triggered (see the description for <code class="code">Abort</code> above), this is also
 terminates the handler. The deferred event will again be processed
 in the future. (5) The handler can raise any other exception.
 This causes that the event is deferred, and the exception falls
 through to the caller of <code class="code">run</code>.
<p>

 <b>Groups</b> are used to simplify the association of events to
 handlers, and to simplify the termination of handlers (see <code class="code">clear</code>).
 If an event is associated with a group, only handlers associated with
 the same group will get them.
<p>

 There is a special <b>Close handler</b> which is useful to close file
 descriptors no longer needed. It is called when all resources are
 removed from the event system dealing with the file descriptor. 
 The close handler should close the descriptor. Note that close handlers
 are only useful under certain circumstances.
<br>
<hr width="100%">
<pre><span class="keyword">method</span> <a name="METHODnew_group"></a>new_group : <code class="type">unit -> <a href="Unixqueue.html#TYPEgroup">group</a></code></pre><pre><span class="keyword">method</span> <a name="METHODnew_wait_id"></a>new_wait_id : <code class="type">unit -> <a href="Unixqueue.html#TYPEwait_id">wait_id</a></code></pre><pre><span class="keyword">method</span> <a name="METHODexists_resource"></a>exists_resource : <code class="type"><a href="Unixqueue.html#TYPEoperation">operation</a> -> bool</code></pre><pre><span class="keyword">method</span> <a name="METHODadd_resource"></a>add_resource : <code class="type"><a href="Unixqueue.html#TYPEgroup">group</a> -> <a href="Unixqueue.html#TYPEoperation">operation</a> * float -> unit</code></pre><pre><span class="keyword">method</span> <a name="METHODadd_close_action"></a>add_close_action : <code class="type"><a href="Unixqueue.html#TYPEgroup">group</a> -> Unix.file_descr * (Unix.file_descr -> unit) -> unit</code></pre><pre><span class="keyword">method</span> <a name="METHODadd_abort_action"></a>add_abort_action : <code class="type"><a href="Unixqueue.html#TYPEgroup">group</a> -> (<a href="Unixqueue.html#TYPEgroup">group</a> -> exn -> unit) -> unit</code></pre><pre><span class="keyword">method</span> <a name="METHODremove_resource"></a>remove_resource : <code class="type"><a href="Unixqueue.html#TYPEgroup">group</a> -> <a href="Unixqueue.html#TYPEoperation">operation</a> -> unit</code></pre><pre><span class="keyword">method</span> <a name="METHODadd_handler"></a>add_handler : <code class="type"><a href="Unixqueue.html#TYPEgroup">group</a> -><br>       (<a href="Unixqueue.event_system.html">event_system</a> -><br>        <a href="Unixqueue.html#TYPEevent">event</a> <a href="Equeue.html#TYPEt">Equeue.t</a> -> <a href="Unixqueue.html#TYPEevent">event</a> -> unit) -><br>       unit</code></pre><pre><span class="keyword">method</span> <a name="METHODadd_event"></a>add_event : <code class="type"><a href="Unixqueue.html#TYPEevent">event</a> -> unit</code></pre><pre><span class="keyword">method</span> <a name="METHODclear"></a>clear : <code class="type"><a href="Unixqueue.html#TYPEgroup">group</a> -> unit</code></pre><pre><span class="keyword">method</span> <a name="METHODrun"></a>run : <code class="type">unit -> unit</code></pre><pre><span class="keyword">method</span> <a name="METHODis_running"></a>is_running : <code class="type">bool</code></pre><pre><span class="keyword">method</span> <a name="METHODonce"></a>once : <code class="type"><a href="Unixqueue.html#TYPEgroup">group</a> -> float -> (unit -> unit) -> unit</code></pre><pre><span class="keyword">method</span> <a name="METHODexn_log"></a>exn_log : <code class="type">?suppressed:bool -><br>       ?to_string:(exn -> string) -> ?label:string -> exn -> unit</code></pre><pre><span class="keyword">method</span> <a name="METHODdebug_log"></a>debug_log : <code class="type">?label:string -> string -> unit</code></pre><pre><span class="keyword">method</span> <a name="METHODsetup"></a><span class="keyword">private</span> setup : <code class="type">unit -><br>       Unix.file_descr list * Unix.file_descr list * Unix.file_descr list * float</code></pre><pre><span class="keyword">method</span> <a name="METHODqueue_events"></a><span class="keyword">private</span> queue_events : <code class="type">Unix.file_descr list * Unix.file_descr list * Unix.file_descr list -> bool</code></pre><pre><span class="keyword">method</span> <a name="METHODsource"></a><span class="keyword">private</span> source : <code class="type"><a href="Unixqueue.html#TYPEevent">event</a> <a href="Equeue.html#TYPEt">Equeue.t</a> -> unit</code></pre></body></html>