AC_INIT(mtr.c)
-AM_INIT_AUTOMAKE(mtr, 0.70)
+AM_INIT_AUTOMAKE(mtr, 0.71)
AC_SUBST(GTK_OBJ)
AC_CHECK_FUNC(res_mkquery, ,
AC_CHECK_LIB(bind, res_mkquery, ,
- AC_CHECK_LIB(resolv, res_mkquery, , AC_MSG_ERROR(No resolver library found))))
+ AC_CHECK_LIB(resolv, res_mkquery, ,
+ AC_CHECK_LIB(resolv, __res_mkquery, , AC_MSG_ERROR(No resolver library found)))))
+LIBS="$LIBS -lresolv"
AC_CHECK_FUNC(herror, , AC_DEFINE(NO_HERROR))
AC_CHECK_FUNC(strerror, , AC_DEFINE(NO_STRERROR))
}
if (PrintHelp) {
- printf("usage: %s [-hvrctglsni46] [--help] [--version] [--report]\n"
+ printf("usage: %s [-hvrctglspni46] [--help] [--version] [--report]\n"
"\t\t[--report-cycles=COUNT] [--curses] [--gtk]\n"
"\t\t[--raw] [--split] [--no-dns] [--address interface]\n" /* BL */
- "\t\t[--psize=bytes/-p=bytes]\n" /* ok */
+ "\t\t[--psize=bytes/-s bytes]\n" /* ok */
"\t\t[--interval=SECONDS] HOSTNAME [PACKETSIZE]\n", argv[0]);
exit(0);
}
int oldavg; /* usedByMin */
int oldjavg; /* usedByMin */
int i; /* usedByMin */
+#ifdef ENABLE_IPV6
+ char addrcopy[sizeof(struct in6_addr)];
+#else
+ char addrcopy[sizeof(struct in_addr)];
+#endif
+
+ /* Copy the from address ASAP because it can be overwritten */
+ addrcpy( (void *) &addrcopy, addr, af );
if (seq < 0 || seq >= MaxSequence)
return;
if ( addrcmp( (void *) &(host[index].addr),
(void *) &unspec_addr, af ) == 0 ) {
// should be out of if as addr can change
- addrcpy( (void *) &(host[index].addr), addr, af );
+ addrcpy( (void *) &(host[index].addr), addrcopy, af );
display_rawhost(index, (void *) &(host[index].addr));
/* multi paths by Min */
- addrcpy( (void *) &(host[index].addrs[0]), addr, af );
+ addrcpy( (void *) &(host[index].addrs[0]), addrcopy, af );
} else {
for( i=0; i<MAXPATH; ) {
- if( addrcmp( (void *) &(host[index].addrs[i]), addr,
+ if( addrcmp( (void *) &(host[index].addrs[i]), (void *) &addrcopy,
af ) == 0 ||
addrcmp( (void *) &(host[index].addrs[i]),
(void *) &unspec_addr, af ) == 0 ) break;
i++;
}
- if( addrcmp( (void *) &(host[index].addrs[i]), addr, af ) != 0 &&
+ if( addrcmp( (void *) &(host[index].addrs[i]), addrcopy, af ) != 0 &&
i<MAXPATH ) {
- addrcpy( (void *) &(host[index].addrs[i]), addr, af );
+ addrcpy( (void *) &(host[index].addrs[i]), addrcopy, af );
}
/* end multi paths */
}
void net_close(void)
{
- close(sendsock);
- close(recvsock);
+ if (sendsock4 >= 0) close(sendsock4);
+ if (recvsock4 >= 0) close(recvsock4);
+ if (sendsock6 >= 0) close(sendsock6);
+ if (recvsock6 >= 0) close(recvsock6);
}