diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp
index 108caa5f990db6da20ff031938b10935c790767b..01c91e2549197ecfc6697fbedbb1225e125e2f60 100644
--- a/src/dhtrunner.cpp
+++ b/src/dhtrunner.cpp
@@ -241,7 +241,7 @@ DhtRunner::doRun(const sockaddr_in* sin4, const sockaddr_in6* sin6, SecureDht::C
     rcv_thread = std::thread([this,s4,s6]() {
         try {
             while (true) {
-                uint8_t buf[4096 * 64];
+                std::array<uint8_t, 1024 * 64> buf;
                 sockaddr_storage from;
                 socklen_t fromlen;
 
@@ -268,15 +268,15 @@ DhtRunner::doRun(const sockaddr_in* sin4, const sockaddr_in6* sin6, SecureDht::C
                 if(rc > 0) {
                     fromlen = sizeof(from);
                     if(s4 >= 0 && FD_ISSET(s4, &readfds))
-                        rc = recvfrom(s4, (char*)buf, sizeof(buf), 0, (struct sockaddr*)&from, &fromlen);
+                        rc = recvfrom(s4, (char*)buf.data(), buf.size(), 0, (struct sockaddr*)&from, &fromlen);
                     else if(s6 >= 0 && FD_ISSET(s6, &readfds))
-                        rc = recvfrom(s6, (char*)buf, sizeof(buf), 0, (struct sockaddr*)&from, &fromlen);
+                        rc = recvfrom(s6, (char*)buf.data(), buf.size(), 0, (struct sockaddr*)&from, &fromlen);
                     else
                         break;
                     if (rc > 0) {
                         {
                             std::lock_guard<std::mutex> lck(sock_mtx);
-                            rcv.emplace_back(Blob {buf, buf+rc+1}, std::make_pair(from, fromlen));
+                            rcv.emplace_back(Blob {buf.begin(), buf.begin()+rc+1}, std::make_pair(from, fromlen));
                         }
                         cv.notify_all();
                     }