tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

epolltable-internal.h (41360B)


      1 /*
      2 * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
      3 * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
      4 *
      5 * Redistribution and use in source and binary forms, with or without
      6 * modification, are permitted provided that the following conditions
      7 * are met:
      8 * 1. Redistributions of source code must retain the above copyright
      9 *    notice, this list of conditions and the following disclaimer.
     10 * 2. Redistributions in binary form must reproduce the above copyright
     11 *    notice, this list of conditions and the following disclaimer in the
     12 *    documentation and/or other materials provided with the distribution.
     13 * 3. The name of the author may not be used to endorse or promote products
     14 *    derived from this software without specific prior written permission.
     15 *
     16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26 */
     27 #ifndef EPOLLTABLE_INTERNAL_H_INCLUDED_
     28 #define EPOLLTABLE_INTERNAL_H_INCLUDED_
     29 
     30 /*
     31  Here are the values we're masking off to decide what operations to do.
     32  Note that since EV_READ|EV_WRITE.
     33 
     34  Note also that this table is a little sparse, since ADD+DEL is
     35  nonsensical ("xxx" in the list below.)
     36 
     37  Note also that we are shifting old_events by only 5 bits, since
     38  EV_READ is 2 and EV_WRITE is 4.
     39 
     40  The table was auto-generated with a python script, according to this
     41  pseudocode:[*0]
     42 
     43      If either the read or the write change is add+del:
     44  This is impossible; Set op==-1, events=0.
     45      Else, if either the read or the write change is add:
     46  Set events to 0.
     47  If the read change is add, or
     48     (the read change is not del, and ev_read is in old_events):
     49        Add EPOLLIN to events.
     50  If the write change is add, or
     51     (the write change is not del, and ev_write is in old_events):
     52        Add EPOLLOUT to events.
     53 
     54  If old_events is set:
     55        Set op to EPOLL_CTL_MOD [*1,*2]
     56 Else:
     57        Set op to EPOLL_CTL_ADD [*3]
     58 
     59      Else, if the read or the write change is del:
     60  Set op to EPOLL_CTL_DEL.
     61  If the read change is del:
     62      If the write change is del:
     63 	 Set events to EPOLLIN|EPOLLOUT
     64      Else if ev_write is in old_events:
     65 	 Set events to EPOLLOUT
     66 	Set op to EPOLL_CTL_MOD
     67      Else
     68 	 Set events to EPOLLIN
     69  Else:
     70      {The write change is del.}
     71     If ev_read is in old_events:
     72 	 Set events to EPOLLIN
     73 	Set op to EPOLL_CTL_MOD
     74     Else:
     75 	Set the events to EPOLLOUT
     76 
     77      Else:
     78    There is no read or write change; set op to 0 and events to 0.
     79 
     80      The logic is a little tricky, since we had no events set on the fd before,
     81      we need to set op="ADD" and set events=the events we want to add.	 If we
     82      had any events set on the fd before, and we want any events to remain on
     83      the fd, we need to say op="MOD" and set events=the events we want to
     84      remain.  But if we want to delete the last event, we say op="DEL" and
     85      set events=(any non-null pointer).
     86 
     87  [*0] Actually, the Python script has gotten a bit more complicated, to
     88       support EPOLLRDHUP.
     89 
     90  [*1] This MOD is only a guess.  MOD might fail with ENOENT if the file was
     91       closed and a new file was opened with the same fd.  If so, we'll retry
     92       with ADD.
     93 
     94  [*2] We can't replace this with a no-op even if old_events is the same as
     95       the new events: if the file was closed and reopened, we need to retry
     96       with an ADD.  (We do a MOD in this case since "no change" is more
     97       common than "close and reopen", so we'll usually wind up doing 1
     98       syscalls instead of 2.)
     99 
    100  [*3] This ADD is only a guess.  There is a fun Linux kernel issue where if
    101       you have two fds for the same file (via dup) and you ADD one to an
    102       epfd, then close it, then re-create it with the same fd (via dup2 or an
    103       unlucky dup), then try to ADD it again, you'll get an EEXIST, since the
    104       struct epitem is not actually removed from the struct eventpoll until
    105       the file itself is closed.
    106 
    107  EV_CHANGE_ADD==1
    108  EV_CHANGE_DEL==2
    109  EV_READ      ==2
    110  EV_WRITE     ==4
    111  EV_CLOSED    ==0x80
    112 
    113  Bit 0: close change is add
    114  Bit 1: close change is del
    115  Bit 2: read change is add
    116  Bit 3: read change is del
    117  Bit 4: write change is add
    118  Bit 5: write change is del
    119  Bit 6: old events had EV_READ
    120  Bit 7: old events had EV_WRITE
    121  Bit 8: old events had EV_CLOSED
    122 */
    123 
    124 #define EPOLL_OP_TABLE_INDEX(c) \
    125 (   (((c)->close_change&(EV_CHANGE_ADD|EV_CHANGE_DEL))) |		\
    126     (((c)->read_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 2) |	\
    127     (((c)->write_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 4) |	\
    128     (((c)->old_events&(EV_READ|EV_WRITE)) << 5) |		\
    129     (((c)->old_events&(EV_CLOSED)) << 1)				\
    130     )
    131 
    132 #if EV_READ != 2 || EV_WRITE != 4 || EV_CLOSED != 0x80 || EV_CHANGE_ADD != 1 || EV_CHANGE_DEL != 2
    133 #error "Libevent's internals changed!  Regenerate the op_table in epolltable-internal.h"
    134 #endif
    135 
    136 static const struct operation {
    137 int events;
    138 int op;
    139 } epoll_op_table[] = {
    140 /* old=  0, write:  0, read:  0, close:  0 */
    141 { 0, 0 },
    142 /* old=  0, write:  0, read:  0, close:add */
    143 { EPOLLRDHUP, EPOLL_CTL_ADD },
    144 /* old=  0, write:  0, read:  0, close:del */
    145 { EPOLLRDHUP, EPOLL_CTL_DEL },
    146 /* old=  0, write:  0, read:  0, close:xxx */
    147 { 0, 255 },
    148 /* old=  0, write:  0, read:add, close:  0 */
    149 { EPOLLIN, EPOLL_CTL_ADD },
    150 /* old=  0, write:  0, read:add, close:add */
    151 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
    152 /* old=  0, write:  0, read:add, close:del */
    153 { EPOLLIN, EPOLL_CTL_ADD },
    154 /* old=  0, write:  0, read:add, close:xxx */
    155 { 0, 255 },
    156 /* old=  0, write:  0, read:del, close:  0 */
    157 { EPOLLIN, EPOLL_CTL_DEL },
    158 /* old=  0, write:  0, read:del, close:add */
    159 { EPOLLRDHUP, EPOLL_CTL_ADD },
    160 /* old=  0, write:  0, read:del, close:del */
    161 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
    162 /* old=  0, write:  0, read:del, close:xxx */
    163 { 0, 255 },
    164 /* old=  0, write:  0, read:xxx, close:  0 */
    165 { 0, 255 },
    166 /* old=  0, write:  0, read:xxx, close:add */
    167 { 0, 255 },
    168 /* old=  0, write:  0, read:xxx, close:del */
    169 { 0, 255 },
    170 /* old=  0, write:  0, read:xxx, close:xxx */
    171 { 0, 255 },
    172 /* old=  0, write:add, read:  0, close:  0 */
    173 { EPOLLOUT, EPOLL_CTL_ADD },
    174 /* old=  0, write:add, read:  0, close:add */
    175 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
    176 /* old=  0, write:add, read:  0, close:del */
    177 { EPOLLOUT, EPOLL_CTL_ADD },
    178 /* old=  0, write:add, read:  0, close:xxx */
    179 { 0, 255 },
    180 /* old=  0, write:add, read:add, close:  0 */
    181 { EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
    182 /* old=  0, write:add, read:add, close:add */
    183 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
    184 /* old=  0, write:add, read:add, close:del */
    185 { EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
    186 /* old=  0, write:add, read:add, close:xxx */
    187 { 0, 255 },
    188 /* old=  0, write:add, read:del, close:  0 */
    189 { EPOLLOUT, EPOLL_CTL_ADD },
    190 /* old=  0, write:add, read:del, close:add */
    191 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
    192 /* old=  0, write:add, read:del, close:del */
    193 { EPOLLOUT, EPOLL_CTL_ADD },
    194 /* old=  0, write:add, read:del, close:xxx */
    195 { 0, 255 },
    196 /* old=  0, write:add, read:xxx, close:  0 */
    197 { 0, 255 },
    198 /* old=  0, write:add, read:xxx, close:add */
    199 { 0, 255 },
    200 /* old=  0, write:add, read:xxx, close:del */
    201 { 0, 255 },
    202 /* old=  0, write:add, read:xxx, close:xxx */
    203 { 0, 255 },
    204 /* old=  0, write:del, read:  0, close:  0 */
    205 { EPOLLOUT, EPOLL_CTL_DEL },
    206 /* old=  0, write:del, read:  0, close:add */
    207 { EPOLLRDHUP, EPOLL_CTL_ADD },
    208 /* old=  0, write:del, read:  0, close:del */
    209 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    210 /* old=  0, write:del, read:  0, close:xxx */
    211 { 0, 255 },
    212 /* old=  0, write:del, read:add, close:  0 */
    213 { EPOLLIN, EPOLL_CTL_ADD },
    214 /* old=  0, write:del, read:add, close:add */
    215 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
    216 /* old=  0, write:del, read:add, close:del */
    217 { EPOLLIN, EPOLL_CTL_ADD },
    218 /* old=  0, write:del, read:add, close:xxx */
    219 { 0, 255 },
    220 /* old=  0, write:del, read:del, close:  0 */
    221 { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
    222 /* old=  0, write:del, read:del, close:add */
    223 { EPOLLRDHUP, EPOLL_CTL_ADD },
    224 /* old=  0, write:del, read:del, close:del */
    225 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    226 /* old=  0, write:del, read:del, close:xxx */
    227 { 0, 255 },
    228 /* old=  0, write:del, read:xxx, close:  0 */
    229 { 0, 255 },
    230 /* old=  0, write:del, read:xxx, close:add */
    231 { 0, 255 },
    232 /* old=  0, write:del, read:xxx, close:del */
    233 { 0, 255 },
    234 /* old=  0, write:del, read:xxx, close:xxx */
    235 { 0, 255 },
    236 /* old=  0, write:xxx, read:  0, close:  0 */
    237 { 0, 255 },
    238 /* old=  0, write:xxx, read:  0, close:add */
    239 { 0, 255 },
    240 /* old=  0, write:xxx, read:  0, close:del */
    241 { 0, 255 },
    242 /* old=  0, write:xxx, read:  0, close:xxx */
    243 { 0, 255 },
    244 /* old=  0, write:xxx, read:add, close:  0 */
    245 { 0, 255 },
    246 /* old=  0, write:xxx, read:add, close:add */
    247 { 0, 255 },
    248 /* old=  0, write:xxx, read:add, close:del */
    249 { 0, 255 },
    250 /* old=  0, write:xxx, read:add, close:xxx */
    251 { 0, 255 },
    252 /* old=  0, write:xxx, read:del, close:  0 */
    253 { 0, 255 },
    254 /* old=  0, write:xxx, read:del, close:add */
    255 { 0, 255 },
    256 /* old=  0, write:xxx, read:del, close:del */
    257 { 0, 255 },
    258 /* old=  0, write:xxx, read:del, close:xxx */
    259 { 0, 255 },
    260 /* old=  0, write:xxx, read:xxx, close:  0 */
    261 { 0, 255 },
    262 /* old=  0, write:xxx, read:xxx, close:add */
    263 { 0, 255 },
    264 /* old=  0, write:xxx, read:xxx, close:del */
    265 { 0, 255 },
    266 /* old=  0, write:xxx, read:xxx, close:xxx */
    267 { 0, 255 },
    268 /* old=  r, write:  0, read:  0, close:  0 */
    269 { 0, 0 },
    270 /* old=  r, write:  0, read:  0, close:add */
    271 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    272 /* old=  r, write:  0, read:  0, close:del */
    273 { EPOLLIN, EPOLL_CTL_MOD },
    274 /* old=  r, write:  0, read:  0, close:xxx */
    275 { 0, 255 },
    276 /* old=  r, write:  0, read:add, close:  0 */
    277 { EPOLLIN, EPOLL_CTL_MOD },
    278 /* old=  r, write:  0, read:add, close:add */
    279 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    280 /* old=  r, write:  0, read:add, close:del */
    281 { EPOLLIN, EPOLL_CTL_MOD },
    282 /* old=  r, write:  0, read:add, close:xxx */
    283 { 0, 255 },
    284 /* old=  r, write:  0, read:del, close:  0 */
    285 { EPOLLIN, EPOLL_CTL_DEL },
    286 /* old=  r, write:  0, read:del, close:add */
    287 { EPOLLRDHUP, EPOLL_CTL_MOD },
    288 /* old=  r, write:  0, read:del, close:del */
    289 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
    290 /* old=  r, write:  0, read:del, close:xxx */
    291 { 0, 255 },
    292 /* old=  r, write:  0, read:xxx, close:  0 */
    293 { 0, 255 },
    294 /* old=  r, write:  0, read:xxx, close:add */
    295 { 0, 255 },
    296 /* old=  r, write:  0, read:xxx, close:del */
    297 { 0, 255 },
    298 /* old=  r, write:  0, read:xxx, close:xxx */
    299 { 0, 255 },
    300 /* old=  r, write:add, read:  0, close:  0 */
    301 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    302 /* old=  r, write:add, read:  0, close:add */
    303 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    304 /* old=  r, write:add, read:  0, close:del */
    305 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    306 /* old=  r, write:add, read:  0, close:xxx */
    307 { 0, 255 },
    308 /* old=  r, write:add, read:add, close:  0 */
    309 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    310 /* old=  r, write:add, read:add, close:add */
    311 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    312 /* old=  r, write:add, read:add, close:del */
    313 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    314 /* old=  r, write:add, read:add, close:xxx */
    315 { 0, 255 },
    316 /* old=  r, write:add, read:del, close:  0 */
    317 { EPOLLOUT, EPOLL_CTL_MOD },
    318 /* old=  r, write:add, read:del, close:add */
    319 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    320 /* old=  r, write:add, read:del, close:del */
    321 { EPOLLOUT, EPOLL_CTL_MOD },
    322 /* old=  r, write:add, read:del, close:xxx */
    323 { 0, 255 },
    324 /* old=  r, write:add, read:xxx, close:  0 */
    325 { 0, 255 },
    326 /* old=  r, write:add, read:xxx, close:add */
    327 { 0, 255 },
    328 /* old=  r, write:add, read:xxx, close:del */
    329 { 0, 255 },
    330 /* old=  r, write:add, read:xxx, close:xxx */
    331 { 0, 255 },
    332 /* old=  r, write:del, read:  0, close:  0 */
    333 { EPOLLIN, EPOLL_CTL_MOD },
    334 /* old=  r, write:del, read:  0, close:add */
    335 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    336 /* old=  r, write:del, read:  0, close:del */
    337 { EPOLLIN, EPOLL_CTL_MOD },
    338 /* old=  r, write:del, read:  0, close:xxx */
    339 { 0, 255 },
    340 /* old=  r, write:del, read:add, close:  0 */
    341 { EPOLLIN, EPOLL_CTL_MOD },
    342 /* old=  r, write:del, read:add, close:add */
    343 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    344 /* old=  r, write:del, read:add, close:del */
    345 { EPOLLIN, EPOLL_CTL_MOD },
    346 /* old=  r, write:del, read:add, close:xxx */
    347 { 0, 255 },
    348 /* old=  r, write:del, read:del, close:  0 */
    349 { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
    350 /* old=  r, write:del, read:del, close:add */
    351 { EPOLLRDHUP, EPOLL_CTL_MOD },
    352 /* old=  r, write:del, read:del, close:del */
    353 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    354 /* old=  r, write:del, read:del, close:xxx */
    355 { 0, 255 },
    356 /* old=  r, write:del, read:xxx, close:  0 */
    357 { 0, 255 },
    358 /* old=  r, write:del, read:xxx, close:add */
    359 { 0, 255 },
    360 /* old=  r, write:del, read:xxx, close:del */
    361 { 0, 255 },
    362 /* old=  r, write:del, read:xxx, close:xxx */
    363 { 0, 255 },
    364 /* old=  r, write:xxx, read:  0, close:  0 */
    365 { 0, 255 },
    366 /* old=  r, write:xxx, read:  0, close:add */
    367 { 0, 255 },
    368 /* old=  r, write:xxx, read:  0, close:del */
    369 { 0, 255 },
    370 /* old=  r, write:xxx, read:  0, close:xxx */
    371 { 0, 255 },
    372 /* old=  r, write:xxx, read:add, close:  0 */
    373 { 0, 255 },
    374 /* old=  r, write:xxx, read:add, close:add */
    375 { 0, 255 },
    376 /* old=  r, write:xxx, read:add, close:del */
    377 { 0, 255 },
    378 /* old=  r, write:xxx, read:add, close:xxx */
    379 { 0, 255 },
    380 /* old=  r, write:xxx, read:del, close:  0 */
    381 { 0, 255 },
    382 /* old=  r, write:xxx, read:del, close:add */
    383 { 0, 255 },
    384 /* old=  r, write:xxx, read:del, close:del */
    385 { 0, 255 },
    386 /* old=  r, write:xxx, read:del, close:xxx */
    387 { 0, 255 },
    388 /* old=  r, write:xxx, read:xxx, close:  0 */
    389 { 0, 255 },
    390 /* old=  r, write:xxx, read:xxx, close:add */
    391 { 0, 255 },
    392 /* old=  r, write:xxx, read:xxx, close:del */
    393 { 0, 255 },
    394 /* old=  r, write:xxx, read:xxx, close:xxx */
    395 { 0, 255 },
    396 /* old=  w, write:  0, read:  0, close:  0 */
    397 { 0, 0 },
    398 /* old=  w, write:  0, read:  0, close:add */
    399 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    400 /* old=  w, write:  0, read:  0, close:del */
    401 { EPOLLOUT, EPOLL_CTL_MOD },
    402 /* old=  w, write:  0, read:  0, close:xxx */
    403 { 0, 255 },
    404 /* old=  w, write:  0, read:add, close:  0 */
    405 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    406 /* old=  w, write:  0, read:add, close:add */
    407 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    408 /* old=  w, write:  0, read:add, close:del */
    409 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    410 /* old=  w, write:  0, read:add, close:xxx */
    411 { 0, 255 },
    412 /* old=  w, write:  0, read:del, close:  0 */
    413 { EPOLLOUT, EPOLL_CTL_MOD },
    414 /* old=  w, write:  0, read:del, close:add */
    415 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    416 /* old=  w, write:  0, read:del, close:del */
    417 { EPOLLOUT, EPOLL_CTL_MOD },
    418 /* old=  w, write:  0, read:del, close:xxx */
    419 { 0, 255 },
    420 /* old=  w, write:  0, read:xxx, close:  0 */
    421 { 0, 255 },
    422 /* old=  w, write:  0, read:xxx, close:add */
    423 { 0, 255 },
    424 /* old=  w, write:  0, read:xxx, close:del */
    425 { 0, 255 },
    426 /* old=  w, write:  0, read:xxx, close:xxx */
    427 { 0, 255 },
    428 /* old=  w, write:add, read:  0, close:  0 */
    429 { EPOLLOUT, EPOLL_CTL_MOD },
    430 /* old=  w, write:add, read:  0, close:add */
    431 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    432 /* old=  w, write:add, read:  0, close:del */
    433 { EPOLLOUT, EPOLL_CTL_MOD },
    434 /* old=  w, write:add, read:  0, close:xxx */
    435 { 0, 255 },
    436 /* old=  w, write:add, read:add, close:  0 */
    437 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    438 /* old=  w, write:add, read:add, close:add */
    439 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    440 /* old=  w, write:add, read:add, close:del */
    441 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    442 /* old=  w, write:add, read:add, close:xxx */
    443 { 0, 255 },
    444 /* old=  w, write:add, read:del, close:  0 */
    445 { EPOLLOUT, EPOLL_CTL_MOD },
    446 /* old=  w, write:add, read:del, close:add */
    447 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    448 /* old=  w, write:add, read:del, close:del */
    449 { EPOLLOUT, EPOLL_CTL_MOD },
    450 /* old=  w, write:add, read:del, close:xxx */
    451 { 0, 255 },
    452 /* old=  w, write:add, read:xxx, close:  0 */
    453 { 0, 255 },
    454 /* old=  w, write:add, read:xxx, close:add */
    455 { 0, 255 },
    456 /* old=  w, write:add, read:xxx, close:del */
    457 { 0, 255 },
    458 /* old=  w, write:add, read:xxx, close:xxx */
    459 { 0, 255 },
    460 /* old=  w, write:del, read:  0, close:  0 */
    461 { EPOLLOUT, EPOLL_CTL_DEL },
    462 /* old=  w, write:del, read:  0, close:add */
    463 { EPOLLRDHUP, EPOLL_CTL_MOD },
    464 /* old=  w, write:del, read:  0, close:del */
    465 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    466 /* old=  w, write:del, read:  0, close:xxx */
    467 { 0, 255 },
    468 /* old=  w, write:del, read:add, close:  0 */
    469 { EPOLLIN, EPOLL_CTL_MOD },
    470 /* old=  w, write:del, read:add, close:add */
    471 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    472 /* old=  w, write:del, read:add, close:del */
    473 { EPOLLIN, EPOLL_CTL_MOD },
    474 /* old=  w, write:del, read:add, close:xxx */
    475 { 0, 255 },
    476 /* old=  w, write:del, read:del, close:  0 */
    477 { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
    478 /* old=  w, write:del, read:del, close:add */
    479 { EPOLLRDHUP, EPOLL_CTL_MOD },
    480 /* old=  w, write:del, read:del, close:del */
    481 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    482 /* old=  w, write:del, read:del, close:xxx */
    483 { 0, 255 },
    484 /* old=  w, write:del, read:xxx, close:  0 */
    485 { 0, 255 },
    486 /* old=  w, write:del, read:xxx, close:add */
    487 { 0, 255 },
    488 /* old=  w, write:del, read:xxx, close:del */
    489 { 0, 255 },
    490 /* old=  w, write:del, read:xxx, close:xxx */
    491 { 0, 255 },
    492 /* old=  w, write:xxx, read:  0, close:  0 */
    493 { 0, 255 },
    494 /* old=  w, write:xxx, read:  0, close:add */
    495 { 0, 255 },
    496 /* old=  w, write:xxx, read:  0, close:del */
    497 { 0, 255 },
    498 /* old=  w, write:xxx, read:  0, close:xxx */
    499 { 0, 255 },
    500 /* old=  w, write:xxx, read:add, close:  0 */
    501 { 0, 255 },
    502 /* old=  w, write:xxx, read:add, close:add */
    503 { 0, 255 },
    504 /* old=  w, write:xxx, read:add, close:del */
    505 { 0, 255 },
    506 /* old=  w, write:xxx, read:add, close:xxx */
    507 { 0, 255 },
    508 /* old=  w, write:xxx, read:del, close:  0 */
    509 { 0, 255 },
    510 /* old=  w, write:xxx, read:del, close:add */
    511 { 0, 255 },
    512 /* old=  w, write:xxx, read:del, close:del */
    513 { 0, 255 },
    514 /* old=  w, write:xxx, read:del, close:xxx */
    515 { 0, 255 },
    516 /* old=  w, write:xxx, read:xxx, close:  0 */
    517 { 0, 255 },
    518 /* old=  w, write:xxx, read:xxx, close:add */
    519 { 0, 255 },
    520 /* old=  w, write:xxx, read:xxx, close:del */
    521 { 0, 255 },
    522 /* old=  w, write:xxx, read:xxx, close:xxx */
    523 { 0, 255 },
    524 /* old= rw, write:  0, read:  0, close:  0 */
    525 { 0, 0 },
    526 /* old= rw, write:  0, read:  0, close:add */
    527 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    528 /* old= rw, write:  0, read:  0, close:del */
    529 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    530 /* old= rw, write:  0, read:  0, close:xxx */
    531 { 0, 255 },
    532 /* old= rw, write:  0, read:add, close:  0 */
    533 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    534 /* old= rw, write:  0, read:add, close:add */
    535 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    536 /* old= rw, write:  0, read:add, close:del */
    537 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    538 /* old= rw, write:  0, read:add, close:xxx */
    539 { 0, 255 },
    540 /* old= rw, write:  0, read:del, close:  0 */
    541 { EPOLLOUT, EPOLL_CTL_MOD },
    542 /* old= rw, write:  0, read:del, close:add */
    543 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    544 /* old= rw, write:  0, read:del, close:del */
    545 { EPOLLOUT, EPOLL_CTL_MOD },
    546 /* old= rw, write:  0, read:del, close:xxx */
    547 { 0, 255 },
    548 /* old= rw, write:  0, read:xxx, close:  0 */
    549 { 0, 255 },
    550 /* old= rw, write:  0, read:xxx, close:add */
    551 { 0, 255 },
    552 /* old= rw, write:  0, read:xxx, close:del */
    553 { 0, 255 },
    554 /* old= rw, write:  0, read:xxx, close:xxx */
    555 { 0, 255 },
    556 /* old= rw, write:add, read:  0, close:  0 */
    557 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    558 /* old= rw, write:add, read:  0, close:add */
    559 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    560 /* old= rw, write:add, read:  0, close:del */
    561 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    562 /* old= rw, write:add, read:  0, close:xxx */
    563 { 0, 255 },
    564 /* old= rw, write:add, read:add, close:  0 */
    565 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    566 /* old= rw, write:add, read:add, close:add */
    567 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    568 /* old= rw, write:add, read:add, close:del */
    569 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    570 /* old= rw, write:add, read:add, close:xxx */
    571 { 0, 255 },
    572 /* old= rw, write:add, read:del, close:  0 */
    573 { EPOLLOUT, EPOLL_CTL_MOD },
    574 /* old= rw, write:add, read:del, close:add */
    575 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    576 /* old= rw, write:add, read:del, close:del */
    577 { EPOLLOUT, EPOLL_CTL_MOD },
    578 /* old= rw, write:add, read:del, close:xxx */
    579 { 0, 255 },
    580 /* old= rw, write:add, read:xxx, close:  0 */
    581 { 0, 255 },
    582 /* old= rw, write:add, read:xxx, close:add */
    583 { 0, 255 },
    584 /* old= rw, write:add, read:xxx, close:del */
    585 { 0, 255 },
    586 /* old= rw, write:add, read:xxx, close:xxx */
    587 { 0, 255 },
    588 /* old= rw, write:del, read:  0, close:  0 */
    589 { EPOLLIN, EPOLL_CTL_MOD },
    590 /* old= rw, write:del, read:  0, close:add */
    591 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    592 /* old= rw, write:del, read:  0, close:del */
    593 { EPOLLIN, EPOLL_CTL_MOD },
    594 /* old= rw, write:del, read:  0, close:xxx */
    595 { 0, 255 },
    596 /* old= rw, write:del, read:add, close:  0 */
    597 { EPOLLIN, EPOLL_CTL_MOD },
    598 /* old= rw, write:del, read:add, close:add */
    599 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    600 /* old= rw, write:del, read:add, close:del */
    601 { EPOLLIN, EPOLL_CTL_MOD },
    602 /* old= rw, write:del, read:add, close:xxx */
    603 { 0, 255 },
    604 /* old= rw, write:del, read:del, close:  0 */
    605 { EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
    606 /* old= rw, write:del, read:del, close:add */
    607 { EPOLLRDHUP, EPOLL_CTL_MOD },
    608 /* old= rw, write:del, read:del, close:del */
    609 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    610 /* old= rw, write:del, read:del, close:xxx */
    611 { 0, 255 },
    612 /* old= rw, write:del, read:xxx, close:  0 */
    613 { 0, 255 },
    614 /* old= rw, write:del, read:xxx, close:add */
    615 { 0, 255 },
    616 /* old= rw, write:del, read:xxx, close:del */
    617 { 0, 255 },
    618 /* old= rw, write:del, read:xxx, close:xxx */
    619 { 0, 255 },
    620 /* old= rw, write:xxx, read:  0, close:  0 */
    621 { 0, 255 },
    622 /* old= rw, write:xxx, read:  0, close:add */
    623 { 0, 255 },
    624 /* old= rw, write:xxx, read:  0, close:del */
    625 { 0, 255 },
    626 /* old= rw, write:xxx, read:  0, close:xxx */
    627 { 0, 255 },
    628 /* old= rw, write:xxx, read:add, close:  0 */
    629 { 0, 255 },
    630 /* old= rw, write:xxx, read:add, close:add */
    631 { 0, 255 },
    632 /* old= rw, write:xxx, read:add, close:del */
    633 { 0, 255 },
    634 /* old= rw, write:xxx, read:add, close:xxx */
    635 { 0, 255 },
    636 /* old= rw, write:xxx, read:del, close:  0 */
    637 { 0, 255 },
    638 /* old= rw, write:xxx, read:del, close:add */
    639 { 0, 255 },
    640 /* old= rw, write:xxx, read:del, close:del */
    641 { 0, 255 },
    642 /* old= rw, write:xxx, read:del, close:xxx */
    643 { 0, 255 },
    644 /* old= rw, write:xxx, read:xxx, close:  0 */
    645 { 0, 255 },
    646 /* old= rw, write:xxx, read:xxx, close:add */
    647 { 0, 255 },
    648 /* old= rw, write:xxx, read:xxx, close:del */
    649 { 0, 255 },
    650 /* old= rw, write:xxx, read:xxx, close:xxx */
    651 { 0, 255 },
    652 /* old=  c, write:  0, read:  0, close:  0 */
    653 { 0, 0 },
    654 /* old=  c, write:  0, read:  0, close:add */
    655 { EPOLLRDHUP, EPOLL_CTL_MOD },
    656 /* old=  c, write:  0, read:  0, close:del */
    657 { EPOLLRDHUP, EPOLL_CTL_DEL },
    658 /* old=  c, write:  0, read:  0, close:xxx */
    659 { 0, 255 },
    660 /* old=  c, write:  0, read:add, close:  0 */
    661 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    662 /* old=  c, write:  0, read:add, close:add */
    663 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    664 /* old=  c, write:  0, read:add, close:del */
    665 { EPOLLIN, EPOLL_CTL_MOD },
    666 /* old=  c, write:  0, read:add, close:xxx */
    667 { 0, 255 },
    668 /* old=  c, write:  0, read:del, close:  0 */
    669 { EPOLLRDHUP, EPOLL_CTL_MOD },
    670 /* old=  c, write:  0, read:del, close:add */
    671 { EPOLLRDHUP, EPOLL_CTL_MOD },
    672 /* old=  c, write:  0, read:del, close:del */
    673 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
    674 /* old=  c, write:  0, read:del, close:xxx */
    675 { 0, 255 },
    676 /* old=  c, write:  0, read:xxx, close:  0 */
    677 { 0, 255 },
    678 /* old=  c, write:  0, read:xxx, close:add */
    679 { 0, 255 },
    680 /* old=  c, write:  0, read:xxx, close:del */
    681 { 0, 255 },
    682 /* old=  c, write:  0, read:xxx, close:xxx */
    683 { 0, 255 },
    684 /* old=  c, write:add, read:  0, close:  0 */
    685 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    686 /* old=  c, write:add, read:  0, close:add */
    687 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    688 /* old=  c, write:add, read:  0, close:del */
    689 { EPOLLOUT, EPOLL_CTL_MOD },
    690 /* old=  c, write:add, read:  0, close:xxx */
    691 { 0, 255 },
    692 /* old=  c, write:add, read:add, close:  0 */
    693 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    694 /* old=  c, write:add, read:add, close:add */
    695 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    696 /* old=  c, write:add, read:add, close:del */
    697 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    698 /* old=  c, write:add, read:add, close:xxx */
    699 { 0, 255 },
    700 /* old=  c, write:add, read:del, close:  0 */
    701 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    702 /* old=  c, write:add, read:del, close:add */
    703 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    704 /* old=  c, write:add, read:del, close:del */
    705 { EPOLLOUT, EPOLL_CTL_MOD },
    706 /* old=  c, write:add, read:del, close:xxx */
    707 { 0, 255 },
    708 /* old=  c, write:add, read:xxx, close:  0 */
    709 { 0, 255 },
    710 /* old=  c, write:add, read:xxx, close:add */
    711 { 0, 255 },
    712 /* old=  c, write:add, read:xxx, close:del */
    713 { 0, 255 },
    714 /* old=  c, write:add, read:xxx, close:xxx */
    715 { 0, 255 },
    716 /* old=  c, write:del, read:  0, close:  0 */
    717 { EPOLLRDHUP, EPOLL_CTL_MOD },
    718 /* old=  c, write:del, read:  0, close:add */
    719 { EPOLLRDHUP, EPOLL_CTL_MOD },
    720 /* old=  c, write:del, read:  0, close:del */
    721 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    722 /* old=  c, write:del, read:  0, close:xxx */
    723 { 0, 255 },
    724 /* old=  c, write:del, read:add, close:  0 */
    725 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    726 /* old=  c, write:del, read:add, close:add */
    727 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    728 /* old=  c, write:del, read:add, close:del */
    729 { EPOLLIN, EPOLL_CTL_MOD },
    730 /* old=  c, write:del, read:add, close:xxx */
    731 { 0, 255 },
    732 /* old=  c, write:del, read:del, close:  0 */
    733 { EPOLLRDHUP, EPOLL_CTL_MOD },
    734 /* old=  c, write:del, read:del, close:add */
    735 { EPOLLRDHUP, EPOLL_CTL_MOD },
    736 /* old=  c, write:del, read:del, close:del */
    737 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    738 /* old=  c, write:del, read:del, close:xxx */
    739 { 0, 255 },
    740 /* old=  c, write:del, read:xxx, close:  0 */
    741 { 0, 255 },
    742 /* old=  c, write:del, read:xxx, close:add */
    743 { 0, 255 },
    744 /* old=  c, write:del, read:xxx, close:del */
    745 { 0, 255 },
    746 /* old=  c, write:del, read:xxx, close:xxx */
    747 { 0, 255 },
    748 /* old=  c, write:xxx, read:  0, close:  0 */
    749 { 0, 255 },
    750 /* old=  c, write:xxx, read:  0, close:add */
    751 { 0, 255 },
    752 /* old=  c, write:xxx, read:  0, close:del */
    753 { 0, 255 },
    754 /* old=  c, write:xxx, read:  0, close:xxx */
    755 { 0, 255 },
    756 /* old=  c, write:xxx, read:add, close:  0 */
    757 { 0, 255 },
    758 /* old=  c, write:xxx, read:add, close:add */
    759 { 0, 255 },
    760 /* old=  c, write:xxx, read:add, close:del */
    761 { 0, 255 },
    762 /* old=  c, write:xxx, read:add, close:xxx */
    763 { 0, 255 },
    764 /* old=  c, write:xxx, read:del, close:  0 */
    765 { 0, 255 },
    766 /* old=  c, write:xxx, read:del, close:add */
    767 { 0, 255 },
    768 /* old=  c, write:xxx, read:del, close:del */
    769 { 0, 255 },
    770 /* old=  c, write:xxx, read:del, close:xxx */
    771 { 0, 255 },
    772 /* old=  c, write:xxx, read:xxx, close:  0 */
    773 { 0, 255 },
    774 /* old=  c, write:xxx, read:xxx, close:add */
    775 { 0, 255 },
    776 /* old=  c, write:xxx, read:xxx, close:del */
    777 { 0, 255 },
    778 /* old=  c, write:xxx, read:xxx, close:xxx */
    779 { 0, 255 },
    780 /* old= cr, write:  0, read:  0, close:  0 */
    781 { 0, 0 },
    782 /* old= cr, write:  0, read:  0, close:add */
    783 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    784 /* old= cr, write:  0, read:  0, close:del */
    785 { EPOLLIN, EPOLL_CTL_MOD },
    786 /* old= cr, write:  0, read:  0, close:xxx */
    787 { 0, 255 },
    788 /* old= cr, write:  0, read:add, close:  0 */
    789 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    790 /* old= cr, write:  0, read:add, close:add */
    791 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    792 /* old= cr, write:  0, read:add, close:del */
    793 { EPOLLIN, EPOLL_CTL_MOD },
    794 /* old= cr, write:  0, read:add, close:xxx */
    795 { 0, 255 },
    796 /* old= cr, write:  0, read:del, close:  0 */
    797 { EPOLLRDHUP, EPOLL_CTL_MOD },
    798 /* old= cr, write:  0, read:del, close:add */
    799 { EPOLLRDHUP, EPOLL_CTL_MOD },
    800 /* old= cr, write:  0, read:del, close:del */
    801 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
    802 /* old= cr, write:  0, read:del, close:xxx */
    803 { 0, 255 },
    804 /* old= cr, write:  0, read:xxx, close:  0 */
    805 { 0, 255 },
    806 /* old= cr, write:  0, read:xxx, close:add */
    807 { 0, 255 },
    808 /* old= cr, write:  0, read:xxx, close:del */
    809 { 0, 255 },
    810 /* old= cr, write:  0, read:xxx, close:xxx */
    811 { 0, 255 },
    812 /* old= cr, write:add, read:  0, close:  0 */
    813 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    814 /* old= cr, write:add, read:  0, close:add */
    815 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    816 /* old= cr, write:add, read:  0, close:del */
    817 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    818 /* old= cr, write:add, read:  0, close:xxx */
    819 { 0, 255 },
    820 /* old= cr, write:add, read:add, close:  0 */
    821 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    822 /* old= cr, write:add, read:add, close:add */
    823 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    824 /* old= cr, write:add, read:add, close:del */
    825 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    826 /* old= cr, write:add, read:add, close:xxx */
    827 { 0, 255 },
    828 /* old= cr, write:add, read:del, close:  0 */
    829 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    830 /* old= cr, write:add, read:del, close:add */
    831 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    832 /* old= cr, write:add, read:del, close:del */
    833 { EPOLLOUT, EPOLL_CTL_MOD },
    834 /* old= cr, write:add, read:del, close:xxx */
    835 { 0, 255 },
    836 /* old= cr, write:add, read:xxx, close:  0 */
    837 { 0, 255 },
    838 /* old= cr, write:add, read:xxx, close:add */
    839 { 0, 255 },
    840 /* old= cr, write:add, read:xxx, close:del */
    841 { 0, 255 },
    842 /* old= cr, write:add, read:xxx, close:xxx */
    843 { 0, 255 },
    844 /* old= cr, write:del, read:  0, close:  0 */
    845 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    846 /* old= cr, write:del, read:  0, close:add */
    847 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    848 /* old= cr, write:del, read:  0, close:del */
    849 { EPOLLIN, EPOLL_CTL_MOD },
    850 /* old= cr, write:del, read:  0, close:xxx */
    851 { 0, 255 },
    852 /* old= cr, write:del, read:add, close:  0 */
    853 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    854 /* old= cr, write:del, read:add, close:add */
    855 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    856 /* old= cr, write:del, read:add, close:del */
    857 { EPOLLIN, EPOLL_CTL_MOD },
    858 /* old= cr, write:del, read:add, close:xxx */
    859 { 0, 255 },
    860 /* old= cr, write:del, read:del, close:  0 */
    861 { EPOLLRDHUP, EPOLL_CTL_MOD },
    862 /* old= cr, write:del, read:del, close:add */
    863 { EPOLLRDHUP, EPOLL_CTL_MOD },
    864 /* old= cr, write:del, read:del, close:del */
    865 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    866 /* old= cr, write:del, read:del, close:xxx */
    867 { 0, 255 },
    868 /* old= cr, write:del, read:xxx, close:  0 */
    869 { 0, 255 },
    870 /* old= cr, write:del, read:xxx, close:add */
    871 { 0, 255 },
    872 /* old= cr, write:del, read:xxx, close:del */
    873 { 0, 255 },
    874 /* old= cr, write:del, read:xxx, close:xxx */
    875 { 0, 255 },
    876 /* old= cr, write:xxx, read:  0, close:  0 */
    877 { 0, 255 },
    878 /* old= cr, write:xxx, read:  0, close:add */
    879 { 0, 255 },
    880 /* old= cr, write:xxx, read:  0, close:del */
    881 { 0, 255 },
    882 /* old= cr, write:xxx, read:  0, close:xxx */
    883 { 0, 255 },
    884 /* old= cr, write:xxx, read:add, close:  0 */
    885 { 0, 255 },
    886 /* old= cr, write:xxx, read:add, close:add */
    887 { 0, 255 },
    888 /* old= cr, write:xxx, read:add, close:del */
    889 { 0, 255 },
    890 /* old= cr, write:xxx, read:add, close:xxx */
    891 { 0, 255 },
    892 /* old= cr, write:xxx, read:del, close:  0 */
    893 { 0, 255 },
    894 /* old= cr, write:xxx, read:del, close:add */
    895 { 0, 255 },
    896 /* old= cr, write:xxx, read:del, close:del */
    897 { 0, 255 },
    898 /* old= cr, write:xxx, read:del, close:xxx */
    899 { 0, 255 },
    900 /* old= cr, write:xxx, read:xxx, close:  0 */
    901 { 0, 255 },
    902 /* old= cr, write:xxx, read:xxx, close:add */
    903 { 0, 255 },
    904 /* old= cr, write:xxx, read:xxx, close:del */
    905 { 0, 255 },
    906 /* old= cr, write:xxx, read:xxx, close:xxx */
    907 { 0, 255 },
    908 /* old= cw, write:  0, read:  0, close:  0 */
    909 { 0, 0 },
    910 /* old= cw, write:  0, read:  0, close:add */
    911 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    912 /* old= cw, write:  0, read:  0, close:del */
    913 { EPOLLOUT, EPOLL_CTL_MOD },
    914 /* old= cw, write:  0, read:  0, close:xxx */
    915 { 0, 255 },
    916 /* old= cw, write:  0, read:add, close:  0 */
    917 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    918 /* old= cw, write:  0, read:add, close:add */
    919 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    920 /* old= cw, write:  0, read:add, close:del */
    921 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    922 /* old= cw, write:  0, read:add, close:xxx */
    923 { 0, 255 },
    924 /* old= cw, write:  0, read:del, close:  0 */
    925 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    926 /* old= cw, write:  0, read:del, close:add */
    927 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    928 /* old= cw, write:  0, read:del, close:del */
    929 { EPOLLOUT, EPOLL_CTL_MOD },
    930 /* old= cw, write:  0, read:del, close:xxx */
    931 { 0, 255 },
    932 /* old= cw, write:  0, read:xxx, close:  0 */
    933 { 0, 255 },
    934 /* old= cw, write:  0, read:xxx, close:add */
    935 { 0, 255 },
    936 /* old= cw, write:  0, read:xxx, close:del */
    937 { 0, 255 },
    938 /* old= cw, write:  0, read:xxx, close:xxx */
    939 { 0, 255 },
    940 /* old= cw, write:add, read:  0, close:  0 */
    941 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    942 /* old= cw, write:add, read:  0, close:add */
    943 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    944 /* old= cw, write:add, read:  0, close:del */
    945 { EPOLLOUT, EPOLL_CTL_MOD },
    946 /* old= cw, write:add, read:  0, close:xxx */
    947 { 0, 255 },
    948 /* old= cw, write:add, read:add, close:  0 */
    949 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    950 /* old= cw, write:add, read:add, close:add */
    951 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    952 /* old= cw, write:add, read:add, close:del */
    953 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
    954 /* old= cw, write:add, read:add, close:xxx */
    955 { 0, 255 },
    956 /* old= cw, write:add, read:del, close:  0 */
    957 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    958 /* old= cw, write:add, read:del, close:add */
    959 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
    960 /* old= cw, write:add, read:del, close:del */
    961 { EPOLLOUT, EPOLL_CTL_MOD },
    962 /* old= cw, write:add, read:del, close:xxx */
    963 { 0, 255 },
    964 /* old= cw, write:add, read:xxx, close:  0 */
    965 { 0, 255 },
    966 /* old= cw, write:add, read:xxx, close:add */
    967 { 0, 255 },
    968 /* old= cw, write:add, read:xxx, close:del */
    969 { 0, 255 },
    970 /* old= cw, write:add, read:xxx, close:xxx */
    971 { 0, 255 },
    972 /* old= cw, write:del, read:  0, close:  0 */
    973 { EPOLLRDHUP, EPOLL_CTL_MOD },
    974 /* old= cw, write:del, read:  0, close:add */
    975 { EPOLLRDHUP, EPOLL_CTL_MOD },
    976 /* old= cw, write:del, read:  0, close:del */
    977 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    978 /* old= cw, write:del, read:  0, close:xxx */
    979 { 0, 255 },
    980 /* old= cw, write:del, read:add, close:  0 */
    981 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    982 /* old= cw, write:del, read:add, close:add */
    983 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
    984 /* old= cw, write:del, read:add, close:del */
    985 { EPOLLIN, EPOLL_CTL_MOD },
    986 /* old= cw, write:del, read:add, close:xxx */
    987 { 0, 255 },
    988 /* old= cw, write:del, read:del, close:  0 */
    989 { EPOLLRDHUP, EPOLL_CTL_MOD },
    990 /* old= cw, write:del, read:del, close:add */
    991 { EPOLLRDHUP, EPOLL_CTL_MOD },
    992 /* old= cw, write:del, read:del, close:del */
    993 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
    994 /* old= cw, write:del, read:del, close:xxx */
    995 { 0, 255 },
    996 /* old= cw, write:del, read:xxx, close:  0 */
    997 { 0, 255 },
    998 /* old= cw, write:del, read:xxx, close:add */
    999 { 0, 255 },
   1000 /* old= cw, write:del, read:xxx, close:del */
   1001 { 0, 255 },
   1002 /* old= cw, write:del, read:xxx, close:xxx */
   1003 { 0, 255 },
   1004 /* old= cw, write:xxx, read:  0, close:  0 */
   1005 { 0, 255 },
   1006 /* old= cw, write:xxx, read:  0, close:add */
   1007 { 0, 255 },
   1008 /* old= cw, write:xxx, read:  0, close:del */
   1009 { 0, 255 },
   1010 /* old= cw, write:xxx, read:  0, close:xxx */
   1011 { 0, 255 },
   1012 /* old= cw, write:xxx, read:add, close:  0 */
   1013 { 0, 255 },
   1014 /* old= cw, write:xxx, read:add, close:add */
   1015 { 0, 255 },
   1016 /* old= cw, write:xxx, read:add, close:del */
   1017 { 0, 255 },
   1018 /* old= cw, write:xxx, read:add, close:xxx */
   1019 { 0, 255 },
   1020 /* old= cw, write:xxx, read:del, close:  0 */
   1021 { 0, 255 },
   1022 /* old= cw, write:xxx, read:del, close:add */
   1023 { 0, 255 },
   1024 /* old= cw, write:xxx, read:del, close:del */
   1025 { 0, 255 },
   1026 /* old= cw, write:xxx, read:del, close:xxx */
   1027 { 0, 255 },
   1028 /* old= cw, write:xxx, read:xxx, close:  0 */
   1029 { 0, 255 },
   1030 /* old= cw, write:xxx, read:xxx, close:add */
   1031 { 0, 255 },
   1032 /* old= cw, write:xxx, read:xxx, close:del */
   1033 { 0, 255 },
   1034 /* old= cw, write:xxx, read:xxx, close:xxx */
   1035 { 0, 255 },
   1036 /* old=crw, write:  0, read:  0, close:  0 */
   1037 { 0, 0 },
   1038 /* old=crw, write:  0, read:  0, close:add */
   1039 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1040 /* old=crw, write:  0, read:  0, close:del */
   1041 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
   1042 /* old=crw, write:  0, read:  0, close:xxx */
   1043 { 0, 255 },
   1044 /* old=crw, write:  0, read:add, close:  0 */
   1045 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1046 /* old=crw, write:  0, read:add, close:add */
   1047 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1048 /* old=crw, write:  0, read:add, close:del */
   1049 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
   1050 /* old=crw, write:  0, read:add, close:xxx */
   1051 { 0, 255 },
   1052 /* old=crw, write:  0, read:del, close:  0 */
   1053 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1054 /* old=crw, write:  0, read:del, close:add */
   1055 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1056 /* old=crw, write:  0, read:del, close:del */
   1057 { EPOLLOUT, EPOLL_CTL_MOD },
   1058 /* old=crw, write:  0, read:del, close:xxx */
   1059 { 0, 255 },
   1060 /* old=crw, write:  0, read:xxx, close:  0 */
   1061 { 0, 255 },
   1062 /* old=crw, write:  0, read:xxx, close:add */
   1063 { 0, 255 },
   1064 /* old=crw, write:  0, read:xxx, close:del */
   1065 { 0, 255 },
   1066 /* old=crw, write:  0, read:xxx, close:xxx */
   1067 { 0, 255 },
   1068 /* old=crw, write:add, read:  0, close:  0 */
   1069 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1070 /* old=crw, write:add, read:  0, close:add */
   1071 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1072 /* old=crw, write:add, read:  0, close:del */
   1073 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
   1074 /* old=crw, write:add, read:  0, close:xxx */
   1075 { 0, 255 },
   1076 /* old=crw, write:add, read:add, close:  0 */
   1077 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1078 /* old=crw, write:add, read:add, close:add */
   1079 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1080 /* old=crw, write:add, read:add, close:del */
   1081 { EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
   1082 /* old=crw, write:add, read:add, close:xxx */
   1083 { 0, 255 },
   1084 /* old=crw, write:add, read:del, close:  0 */
   1085 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1086 /* old=crw, write:add, read:del, close:add */
   1087 { EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
   1088 /* old=crw, write:add, read:del, close:del */
   1089 { EPOLLOUT, EPOLL_CTL_MOD },
   1090 /* old=crw, write:add, read:del, close:xxx */
   1091 { 0, 255 },
   1092 /* old=crw, write:add, read:xxx, close:  0 */
   1093 { 0, 255 },
   1094 /* old=crw, write:add, read:xxx, close:add */
   1095 { 0, 255 },
   1096 /* old=crw, write:add, read:xxx, close:del */
   1097 { 0, 255 },
   1098 /* old=crw, write:add, read:xxx, close:xxx */
   1099 { 0, 255 },
   1100 /* old=crw, write:del, read:  0, close:  0 */
   1101 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
   1102 /* old=crw, write:del, read:  0, close:add */
   1103 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
   1104 /* old=crw, write:del, read:  0, close:del */
   1105 { EPOLLIN, EPOLL_CTL_MOD },
   1106 /* old=crw, write:del, read:  0, close:xxx */
   1107 { 0, 255 },
   1108 /* old=crw, write:del, read:add, close:  0 */
   1109 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
   1110 /* old=crw, write:del, read:add, close:add */
   1111 { EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
   1112 /* old=crw, write:del, read:add, close:del */
   1113 { EPOLLIN, EPOLL_CTL_MOD },
   1114 /* old=crw, write:del, read:add, close:xxx */
   1115 { 0, 255 },
   1116 /* old=crw, write:del, read:del, close:  0 */
   1117 { EPOLLRDHUP, EPOLL_CTL_MOD },
   1118 /* old=crw, write:del, read:del, close:add */
   1119 { EPOLLRDHUP, EPOLL_CTL_MOD },
   1120 /* old=crw, write:del, read:del, close:del */
   1121 { EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
   1122 /* old=crw, write:del, read:del, close:xxx */
   1123 { 0, 255 },
   1124 /* old=crw, write:del, read:xxx, close:  0 */
   1125 { 0, 255 },
   1126 /* old=crw, write:del, read:xxx, close:add */
   1127 { 0, 255 },
   1128 /* old=crw, write:del, read:xxx, close:del */
   1129 { 0, 255 },
   1130 /* old=crw, write:del, read:xxx, close:xxx */
   1131 { 0, 255 },
   1132 /* old=crw, write:xxx, read:  0, close:  0 */
   1133 { 0, 255 },
   1134 /* old=crw, write:xxx, read:  0, close:add */
   1135 { 0, 255 },
   1136 /* old=crw, write:xxx, read:  0, close:del */
   1137 { 0, 255 },
   1138 /* old=crw, write:xxx, read:  0, close:xxx */
   1139 { 0, 255 },
   1140 /* old=crw, write:xxx, read:add, close:  0 */
   1141 { 0, 255 },
   1142 /* old=crw, write:xxx, read:add, close:add */
   1143 { 0, 255 },
   1144 /* old=crw, write:xxx, read:add, close:del */
   1145 { 0, 255 },
   1146 /* old=crw, write:xxx, read:add, close:xxx */
   1147 { 0, 255 },
   1148 /* old=crw, write:xxx, read:del, close:  0 */
   1149 { 0, 255 },
   1150 /* old=crw, write:xxx, read:del, close:add */
   1151 { 0, 255 },
   1152 /* old=crw, write:xxx, read:del, close:del */
   1153 { 0, 255 },
   1154 /* old=crw, write:xxx, read:del, close:xxx */
   1155 { 0, 255 },
   1156 /* old=crw, write:xxx, read:xxx, close:  0 */
   1157 { 0, 255 },
   1158 /* old=crw, write:xxx, read:xxx, close:add */
   1159 { 0, 255 },
   1160 /* old=crw, write:xxx, read:xxx, close:del */
   1161 { 0, 255 },
   1162 /* old=crw, write:xxx, read:xxx, close:xxx */
   1163 { 0, 255 },
   1164 };
   1165 
   1166 #endif