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

Attachment: signature.asc
Description: Digital signature

Reply via email to