ctl->af = DEFAULT_AF; // should this obey the cmd line option?
ctl->Hostname = gtk_entry_get_text(GTK_ENTRY(entry));
- if (get_addrinfo_from_name(ctl, &res, ctl->Hostname) == 0) {
- net_reopen(ctl, res);
+ if (get_addrinfo_from_name(ctl, &res, ctl->Hostname) == 0 &&
+ net_reopen(ctl, res) == 0) {
freeaddrinfo(res);
net_send_batch(ctl);
/* If we are "Paused" at this point it is usually because someone
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Pause_Button), 0);
} else {
int pos = strlen(gtk_entry_get_text(GTK_ENTRY(entry)));
+ if (res) {
+ freeaddrinfo(res);
+ }
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Pause_Button), 1);
gtk_editable_insert_text(GTK_EDITABLE(entry), ": not found", -1,
&pos);
{
int err;
+ if (!addrcmp(sockaddr_addr_offset(res->ai_addr), &ctl->unspec_addr, res->ai_family))
+ return -1;
+
/* Spawn the mtr-packet child process */
err = open_command_pipe(ctl, &packet_command_pipe);
if (err) {
return err;
}
- net_reopen(ctl, res);
-
- return 0;
+ return net_reopen(ctl, res);
}
-void net_reopen(
+int net_reopen(
struct mtr_ctl *ctl,
struct addrinfo *res)
{
int at;
+ if (!addrcmp(sockaddr_addr_offset(res->ai_addr), &ctl->unspec_addr, res->ai_family))
+ return -1;
+
for (at = 0; at < MaxHost; at++) {
memset(&host[at], 0, sizeof(host[at]));
}
net_find_local_address(ctl);
}
+ return 0;
}