/*---------------------------------------------------------------
* Copyright ( c ) 1999 , 2000 , 2001 , 2002 , 2003
* The Board of Trustees of the University of Illinois
* All Rights Reserved .
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Permission is hereby granted , free of charge , to any person
* obtaining a copy of this software ( Iperf ) and associated
* documentation files ( the " Software " ) , to deal in the Software
* without restriction , including without limitation the
* rights to use , copy , modify , merge , publish , distribute ,
* sublicense , and / or sell copies of the Software , and to permit
* persons to whom the Software is furnished to do
* so , subject to the following conditions :
*
*
* Redistributions of source code must retain the above
* copyright notice , this list of conditions and
* the following disclaimers .
*
*
* Redistributions in binary form must reproduce the above
* copyright notice , this list of conditions and the following
* disclaimers in the documentation and / or other materials
* provided with the distribution .
*
*
* Neither the names of the University of Illinois , NCSA ,
* nor the names of its contributors may be used to endorse
* or promote products derived from this Software without
* specific prior written permission .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND ,
* EXPRESS OR IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY , FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT . IN NO EVENT SHALL THE CONTIBUTORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER LIABILITY ,
* WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE ,
* ARISING FROM , OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE .
* _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
* National Laboratory for Applied Network Research
* National Center for Supercomputing Applications
* University of Illinois at Urbana - Champaign
* http : //www.ncsa.uiuc.edu
* _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
*
* signal . c
* by Mark Gates < mgates @ nlanr . net >
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* standard signal installer
* ------------------------------------------------------------------- */
#include "headers.h"
#include "util.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef WIN32
/* list of signal handlers. _NSIG is number of signals defined. */
static SigfuncPtr handlers[ _NSIG ] = { 0 };
/* -------------------------------------------------------------------
* sig_dispatcher
*
* dispatches the signal to appropriate signal handler . This emulates
* the signal handling of Unix .
*
* ------------------------------------------------------------------- */
BOOL WINAPI sig_dispatcher( DWORD type ) {
SigfuncPtr h = NULL;
int signo;
switch ( type ) {
case CTRL_C_EVENT:
signo = SIGINT;
h = handlers[ SIGINT ];
break ;
case CTRL_CLOSE_EVENT:
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
signo = SIGTERM;
h = handlers[ SIGTERM ];
break ;
default :
break ;
}
if ( h != NULL ) {
// call the signal handler
h( signo );
return true ;
} else {
return false ;
}
}
/* -------------------------------------------------------------------
* my_signal
*
* installs a signal handler . I emulate Unix signals by storing the
* function pointers and dispatching events myself , using the
* sig_dispatcher above .
* ------------------------------------------------------------------- */
SigfuncPtr my_signal( int inSigno, SigfuncPtr inFunc ) {
SigfuncPtr old = NULL;
if ( inSigno >= 0 && inSigno < _NSIG ) {
old = handlers[ inSigno ];
handlers[ inSigno ] = inFunc;
}
return old;
} /* end my_signal */
#else /* not WIN32 */
/* -------------------------------------------------------------------
* my_signal
*
* installs a signal handler , and returns the old handler .
* This emulates the semi - standard signal ( ) function in a
* standard way using the Posix sigaction function .
*
* from Stevens , 1998 , section 5 . 8
* ------------------------------------------------------------------- */
SigfuncPtr my_signal( int inSigno, SigfuncPtr inFunc ) {
struct sigaction theNewAction, theOldAction;
assert( inFunc != NULL );
theNewAction.sa_handler = inFunc;
sigemptyset( &theNewAction.sa_mask );
theNewAction.sa_flags = 0 ;
if ( inSigno == SIGALRM ) {
#ifdef SA_INTERRUPT
theNewAction.sa_flags |= SA_INTERRUPT; /* SunOS 4.x */
#endif
} else {
#ifdef SA_RESTART
theNewAction.sa_flags |= SA_RESTART; /* SVR4, 4.4BSD */
#endif
}
if ( sigaction( inSigno, &theNewAction, &theOldAction ) < 0 ) {
return SIG_ERR;
} else {
return theOldAction.sa_handler;
}
} /* end my_signal */
#endif /* not WIN32 */
/* -------------------------------------------------------------------
* sig_exit
*
* Quietly exits . This protects some against being called multiple
* times . ( TODO : should use a mutex to ensure ( num + + = = 0 ) is atomic . )
* ------------------------------------------------------------------- */
void sig_exit( int inSigno ) {
static int num = 0 ;
if ( num++ == 0 ) {
fflush( 0 );
exit ( 0 );
}
} /* end sig_exit */
#ifdef __cplusplus
} /* end extern "C" */
#endif
Messung V0.5 in Prozent C=92 H=100 G=95
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland