u8 *cmd = 0;
int do_quit = 0;
int is_interactive = 0;
+ int acked = 1; /* counts messages from VPP; starts at 1 */
int sent_ttype = 0;
argc--;
argv++;
- if (argc > 1 && strcmp (argv[0], "-s") == 0)
+ if (argc > 1 && strncmp (argv[0], "-s", 2) == 0)
{
s->config = argv[1];
argc -= 2;
if (is_interactive)
{
/* Capture terminal resize events */
- memset (&sa, 0, sizeof (struct sigaction));
+ clib_memset (&sa, 0, sizeof (struct sigaction));
sa.sa_handler = signal_handler_winch;
if (sigaction (SIGWINCH, &sa, 0) < 0)
{
}
while (q < (p + len) && !*q)
- q++;
+ {
+ q++;
+ acked++; /* every NUL is an acknowledgement */
+ }
len -= q - p;
p = q;
}
vec_reset_length (str);
}
- if (do_quit)
+ if (do_quit && do_quit < acked)
{
/* Ask the other end to close the connection */
clib_socket_tx_add_formatted (s, "quit\n");
clib_socket_tx_add_formatted (s, "%s\n", cmd);
clib_socket_tx (s);
vec_free (cmd);
- do_quit = 1;
+ do_quit = acked; /* quit after the next response */
}
}
else