/* $OpenBSD: select.c,v 1.2 2002/06/25 15:50:15 mickey Exp $ */ /* * Copyright 2000-2002 Niels Provos <[email protected]> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef WIN32 #define WIN32_LEAN_AND_MEAN #include <winsock2.h> #include <windows.h> #undef WIN32_LEAN_AND_MEAN #endif #include <sys/types.h> #ifdef HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <sys/queue.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #include <errno.h> #ifdef HAVE_FCNTL_H #include <fcntl.h> #endif #include <assert.h> #include "event.h" #include "event-internal.h" #include "evsignal.h" #include "evutil.h" #include "log.h" struct event_base *evsignal_base = …; static void evsignal_handler(int sig); #ifdef WIN32 #define error_is_eagain … #else #define error_is_eagain(err) … #endif /* Callback for when the signal handler write a byte to our signaling socket */ static void evsignal_cb(int fd, short what, void *arg) { … } #ifdef HAVE_SETFD #define FD_CLOSEONEXEC(x) … #else #define FD_CLOSEONEXEC … #endif int evsignal_init(struct event_base *base) { … } /* Helper: set the signal handler for evsignal to handler in base, so that * we can restore the original handler when we clear the current one. */ int _evsignal_set_handler(struct event_base *base, int evsignal, void (*handler)(int)) { … } int evsignal_add(struct event *ev) { … } int _evsignal_restore_handler(struct event_base *base, int evsignal) { … } int evsignal_del(struct event *ev) { … } static void evsignal_handler(int sig) { … } void evsignal_process(struct event_base *base) { … } void evsignal_dealloc(struct event_base *base) { … }