Index: /trunk/FACT++/src/Dim.cc
===================================================================
--- /trunk/FACT++/src/Dim.cc	(revision 10847)
+++ /trunk/FACT++/src/Dim.cc	(revision 10848)
@@ -8,8 +8,11 @@
 #include "Dim.h"
 
+/*
 #include <netdb.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
+*/
+#include <boost/asio.hpp>
 
 #include <iostream>
@@ -31,4 +34,44 @@
 string Dim::GetLocalIp(const string &dns)
 {
+    using namespace boost::asio;
+    using namespace boost::asio::ip;
+
+    cout << "Trying to resolve local IP address..." << endl;
+
+    boost::system::error_code ec;
+
+    boost::asio::io_service io_service;
+
+    udp::socket socket(io_service);
+
+    udp::resolver resolver(io_service);
+    udp::resolver::query query(dns, "0");
+    udp::resolver::iterator iterator = resolver.resolve(query, ec);
+    if (ec)
+    {
+        cout << "WARNING - Failure in name-resolution of '" << dns << ":0': ";
+        cout << ec.message() << " (" << ec << ")" << endl;
+        return dns;
+    }
+
+    for (; iterator != udp::resolver::iterator(); ++iterator)
+    {
+        udp::endpoint endpoint = *iterator;
+        socket.connect(endpoint, ec);
+        if (ec)
+        {
+            cout << "WARNING - connect to '" << dns << ":0' failed: ";
+            cout << ec.message() << " (" << ec << ")" << endl;
+            continue;
+        }
+
+        const string addr = socket.local_endpoint().address().to_v4().to_string();
+        cout << "Setting DIM_HOST_NODE=" << addr << endl;
+        return addr;
+    }
+
+    return dns;
+
+/*
     struct addrinfo hints, *servinfo, *p;
 
@@ -86,4 +129,5 @@
 
     return dns;
+*/
 }
 
