a variable in main needs to be used in a signal handler. if you dont make this variable a global variable or some pointer to it a global, then this is not possible, correct? so to solve that, this:
Code:
 in main
///set the jump buffer so we can shut down promisc mode 
        if( (sigsetjmp( jmpbuf, 1)) ){
                goto bad;
        }else{
                if( (signal(SIGINT, sig_int)) == SIG_ERR ){
                        perror("signal");
                        return 1;
                }
        }
and
Code:
static void     sig_int(int signo)
{
        if(canjump == 0)
                return;

        siglongjmp(jmpbuf, 1);  //jump back to main and bail out
}
and bad: does some cleanup at the end of main. how else would you do that?