Annotation of embedaddon/thttpd/fdwatch.h, revision 1.1.1.1

1.1       misho       1: /* fdwatch.h - header file for fdwatch package
                      2: **
                      3: ** This package abstracts the use of the select()/poll()/kqueue()
                      4: ** system calls.  The basic function of these calls is to watch a set
                      5: ** of file descriptors for activity.  select() originated in the BSD world,
                      6: ** while poll() came from SysV land, and their interfaces are somewhat
                      7: ** different.  fdwatch lets you write your code to a single interface,
                      8: ** with the portability differences hidden inside the package.
                      9: **
                     10: ** Usage is fairly simple.  Call fdwatch_get_nfiles() to initialize
                     11: ** the package and find out how many fine descriptors are available.
                     12: ** Then each time through your main loop, call fdwatch_clear(), then
                     13: ** fdwatch_add_fd() for each of the descriptors you want to watch,
                     14: ** then call fdwatch() to actually perform the watch.  After it returns
                     15: ** you can check which descriptors are ready via fdwatch_check_fd().
                     16: **
                     17: ** If your descriptor set hasn't changed from the last time through
                     18: ** the loop, you can skip calling fdwatch_clear() and fdwatch_add_fd()
                     19: ** to save a little CPU time.
                     20: **
                     21: **
                     22: ** Copyright © 1999 by Jef Poskanzer <jef@mail.acme.com>.
                     23: ** All rights reserved.
                     24: **
                     25: ** Redistribution and use in source and binary forms, with or without
                     26: ** modification, are permitted provided that the following conditions
                     27: ** are met:
                     28: ** 1. Redistributions of source code must retain the above copyright
                     29: **    notice, this list of conditions and the following disclaimer.
                     30: ** 2. Redistributions in binary form must reproduce the above copyright
                     31: **    notice, this list of conditions and the following disclaimer in the
                     32: **    documentation and/or other materials provided with the distribution.
                     33: **
                     34: ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     35: ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     36: ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     37: ** ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     38: ** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     39: ** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     40: ** OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     41: ** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     42: ** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     43: ** OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     44: ** SUCH DAMAGE.
                     45: */
                     46: 
                     47: #ifndef _FDWATCH_H_
                     48: #define _FDWATCH_H_
                     49: 
                     50: #define FDW_READ 0
                     51: #define FDW_WRITE 1
                     52: 
                     53: #ifndef INFTIM
                     54: #define INFTIM -1
                     55: #endif /* INFTIM */
                     56: 
                     57: /* Figure out how many file descriptors the system allows, and
                     58: ** initialize the fdwatch data structures.  Returns -1 on failure.
                     59: */
                     60: extern int fdwatch_get_nfiles( void );
                     61: 
                     62: /* Add a descriptor to the watch list.  rw is either FDW_READ or FDW_WRITE.  */
                     63: extern void fdwatch_add_fd( int fd, void* client_data, int rw );
                     64: 
                     65: /* Delete a descriptor from the watch list. */
                     66: extern void fdwatch_del_fd( int fd );
                     67: 
                     68: /* Do the watch.  Return value is the number of descriptors that are ready,
                     69: ** or 0 if the timeout expired, or -1 on errors.  A timeout of INFTIM means
                     70: ** wait indefinitely.
                     71: */
                     72: extern int fdwatch( long timeout_msecs );
                     73: 
                     74: /* Check if a descriptor was ready. */
                     75: extern int fdwatch_check_fd( int fd );
                     76: 
                     77: /* Get the client data for the next returned event.  Returns -1 when there
                     78: ** are no more events.
                     79: */
                     80: extern void* fdwatch_get_next_client_data( void );
                     81: 
                     82: /* Generate debugging statistics syslog message. */
                     83: extern void fdwatch_logstats( long secs );
                     84: 
                     85: #endif /* _FDWATCH_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>