union sockaddr_in46 his_addr;
static socklen_t his_addr_len;
+static int quit = 0;
+
static int on_terminal = 0;
static int no_dns = 0;
FD_SET(sock_fd, &rdfd);
+ if (quit)
+ return 0;
+
select_status = select(sock_fd + 1, &rdfd, &wrfd, &exfd, &tv);
if (select_status < 0) {
/* ================================================== */
static int
-process_line(char *line, int *quit)
+process_line(char *line)
{
char *command;
int do_normal_submit;
CMD_Request tx_message;
CMD_Reply rx_message;
- *quit = 0;
ret = 0;
do_normal_submit = 1;
process_cmd_dump(&tx_message, line);
} else if (!strcmp(command, "exit")) {
do_normal_submit = 0;
- *quit = 1;
+ quit = 1;
ret = 1;
} else if (!strcmp(command, "help")) {
do_normal_submit = 0;
do_normal_submit = process_cmd_polltarget(&tx_message, line);
} else if (!strcmp(command, "quit")) {
do_normal_submit = 0;
- *quit = 1;
+ quit = 1;
ret = 1;
} else if (!strcmp(command, "rekey")) {
process_cmd_rekey(&tx_message, line);
static int
process_args(int argc, char **argv, int multi)
{
- int total_length, i, ret, quit;
+ int total_length, i, ret;
char *line;
total_length = 0;
}
}
- ret = process_line(line, &quit);
+ ret = process_line(line);
if (!ret || quit)
break;
}
/* ================================================== */
+static void
+signal_handler(int signum)
+{
+ quit = 1;
+}
+
+/* ================================================== */
+
static void
display_gpl(void)
{
const char *progname = argv[0];
const char *hostname = NULL;
const char *conf_file = DEFAULT_CONF_FILE;
- int quit = 0, ret = 1, multi = 0, auto_auth = 0, family = IPADDR_UNSPEC;
+ int ret = 1, multi = 0, auto_auth = 0, family = IPADDR_UNSPEC;
int port = DEFAULT_CANDM_PORT;
/* Parse command line options */
#endif
}
+ UTI_SetQuitSignalsHandler(signal_handler);
+
open_io(hostname, port);
if (auto_auth) {
do {
line = read_line();
if (line) {
- ret = process_line(line, &quit);
+ ret = process_line(line);
}else {
/* supply the final '\n' when user exits via ^D */
if( on_terminal ) printf("\n");