X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Ftlsproxy.c;h=a54a6e9c5161e6a67f3c68950daac3da7894596c;hb=451082eb1b2f8fc5cbacbb65cd4e48348192b477;hp=17c49e971b6a27d1e7c096c2a85977256265d1de;hpb=946885b04de70f8481f58160de12f3ee3b0b380a;p=tlsproxy%2Ftlsproxy.git diff --git a/src/tlsproxy.c b/src/tlsproxy.c index 17c49e9..a54a6e9 100644 --- a/src/tlsproxy.c +++ b/src/tlsproxy.c @@ -73,7 +73,9 @@ static SEM *ringbuffer_free; /* Space for another element in the buffer? */ static SEM *ringbuffer_lock; /* Read lock. */ +#ifdef DEBUG static void sigint_handler(int signal); +#endif static void parse_arguments(int argc, char **argv); static void print_usage(const char *argv); @@ -87,7 +89,11 @@ static void worker_thread(void); int main(int argc, char **argv) { int port; int client_socket, server_socket; +#ifdef USE_IPV4_ONLY + struct sockaddr_in server_in; +#else struct sockaddr_in6 server_in; +#endif size_t i; pthread_t *threads; @@ -104,11 +110,13 @@ int main(int argc, char **argv) { } /* Setup our SIGINT signal handler which allows a "normal" termination of - * the server. */ + * the server in DEBUG mode. */ sigemptyset(&action.sa_mask); - action.sa_handler = sigint_handler; action.sa_flags = 0; +#ifdef DEBUG + action.sa_handler = sigint_handler; sigaction(SIGINT, &action, NULL); +#endif /* Ignore SIGPIPEs. */ action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); @@ -142,14 +150,19 @@ int main(int argc, char **argv) { (void * (*)(void *))&worker_thread, NULL); if (0 != result) { - printf("failed to create worker thread: %s\n", strerror(result)); + fprintf(stderr, "failed to create worker thread: %s\n", + strerror(result)); return EXIT_FAILURE; } threads[i] = thread; } +#ifdef USE_IPV4_ONLY + server_socket = socket(PF_INET, SOCK_STREAM, 0); +#else server_socket = socket(PF_INET6, SOCK_STREAM, 0); +#endif if (-1 == server_socket) { perror("socket()"); return EXIT_FAILURE; @@ -166,9 +179,15 @@ int main(int argc, char **argv) { /* Bind to the listen socket. */ memset(&server_in, 0, sizeof(server_in)); +#ifdef USE_IPV4_ONLY + server_in.sin_family = AF_INET; /* IPv4 only */ + server_in.sin_addr.s_addr = INADDR_ANY; /* bind to any address */ + server_in.sin_port = htons((uint16_t)port); /* port to bind to */ +#else server_in.sin6_family = AF_INET6; /* IPv6 (and IPv4) */ server_in.sin6_addr = in6addr_any; /* bind to any address */ server_in.sin6_port = htons((uint16_t)port); /* port to bind to */ +#endif if (-1 == bind(server_socket, (struct sockaddr *)&server_in, sizeof(server_in))) { perror("bind()"); @@ -235,11 +254,13 @@ int main(int argc, char **argv) { return EXIT_FAILURE; } +#ifdef DEBUG static void sigint_handler(int signal_number) { (void)signal_number; done = 1; } +#endif static void parse_arguments(int argc, char **argv) { int option;