Hello, Here is my old patch, now updated for 0.71.
It solves the problem only with the -a option. The last one used dns_forward(LocalHostname) to achieve a IP address retrieval, but I guess this is not the best way to do it on a multi-network box ; forcing a interface could stop mtr working. Cheers, -- Julien Danjou .''`. Debian Developer : :' : http://julien.danjou.info `. `' http://people.debian.org/~acid `- 9A0D 5FD9 EB42 22F6 8974 C95C A462 B51E C2FE E5CD
diff -u mtr-0.71/net.c mtr-0.71.jd/net.c
--- mtr-0.71/net.c 2006-03-24 07:37:17.000000000 +0100
+++ mtr-0.71.jd/net.c 2006-05-04 16:38:20.000000000 +0200
@@ -676,6 +677,14 @@
char * net_localaddr (void)
{
+ struct sockaddr_storage name_struct;
+ struct sockaddr * name = (struct sockaddr *) &name_struct;
+ socklen_t len;
+
+ len = sizeof name_struct;
+ getsockname (sendsock, name, &len);
+ sockaddrtop( name, localaddr, sizeof localaddr );
+
return localaddr;
}
@@ -782,8 +791,6 @@
#else
struct sockaddr_in name_struct;
#endif
- struct sockaddr * name = (struct sockaddr *) &name_struct;
- socklen_t len;
net_reset();
@@ -815,9 +822,6 @@
exit( EXIT_FAILURE );
}
- len = sizeof name_struct;
- getsockname (recvsock, name, &len);
- sockaddrtop( name, localaddr, sizeof localaddr );
#if 0
printf ("got localaddr: %s\n", localaddr);
#endif
@@ -896,7 +900,7 @@
int net_set_interfaceaddress (char *InterfaceAddress)
{
- int len = 0;
+ size_t len = 0;
if (!InterfaceAddress) return 0;
Only in mtr-0.71.jd: tr
signature.asc
Description: Digital signature

