diff options
author | Christian Pointner <equinox@anytun.org> | 2008-12-29 06:13:48 +0000 |
---|---|---|
committer | Christian Pointner <equinox@anytun.org> | 2008-12-29 06:13:48 +0000 |
commit | d759331ef32bbf0908bce4d8753293ef08bbbfed (patch) | |
tree | 67e33b5fe11e14d154beaa6bf609aebac760645c /src/uanytun.c | |
parent | added -O2 to CCFLAGS (diff) |
improved signal handling
Diffstat (limited to 'src/uanytun.c')
-rw-r--r-- | src/uanytun.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/uanytun.c b/src/uanytun.c index d76c468..0d47e8f 100644 --- a/src/uanytun.c +++ b/src/uanytun.c @@ -37,6 +37,7 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> +#include <errno.h> #include "log.h" #include "signal.h" @@ -83,13 +84,19 @@ int main_loop(tun_device_t* dev, udp_socket_t* sock, options_t* opt) int nfds = dev->fd_ > sock->fd_ ? dev->fd_+1 : sock->fd_+1; int ret = select(nfds, &readfds, NULL, NULL, NULL); - if(ret == -1) { + if(ret == -1 && errno != EINTR) { log_printf(ERR, "select returned with error: %m"); + cipher_close(&c); return -1; } if(!ret) continue; + if(signal_exit) { + cipher_close(&c); + return 1; + } + if(FD_ISSET(dev->fd_, &readfds)) { len = tun_read(dev, plain_packet_get_payload(&plain_packet), plain_packet_get_payload_length(&plain_packet)); plain_packet_set_payload_length(&plain_packet, len); @@ -231,6 +238,11 @@ int main(int argc, char* argv[]) if(!ret) log_printf(NOTICE, "normal shutdown"); + else if(ret < 0) + log_printf(NOTICE, "shutdown after error"); + else + log_printf(NOTICE, "shutdown after signal"); + return ret; } |