]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Remove unused code since we moved to an event-based logic 7823/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 15 May 2019 09:06:42 +0000 (11:06 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 15 May 2019 09:06:42 +0000 (11:06 +0200)
Unused code will only get worse with the time, let's not keep it
around.

pdns/dnsdist-tcp.cc
pdns/iputils.cc
pdns/iputils.hh
pdns/tcpiohandler.hh

index 3a3ecbdd2e93bb7885b5a79c2a0207b78ae5340a..6c437e270f697824099b8c5da839c250ff8dc963 100644 (file)
@@ -905,7 +905,7 @@ static void handleDownstreamIO(std::shared_ptr<IncomingTCPConnectionState>& stat
       }
 #endif /* MSG_FASTOPEN */
 
-      size_t sent = sendMsgWithTimeout(fd, reinterpret_cast<const char *>(&state->d_buffer.at(state->d_currentPos)), state->d_buffer.size() - state->d_currentPos, 0, &state->d_ds->remote, &state->d_ds->sourceAddr, state->d_ds->sourceItf, 0, socketFlags);
+      size_t sent = sendMsgWithOptions(fd, reinterpret_cast<const char *>(&state->d_buffer.at(state->d_currentPos)), state->d_buffer.size() - state->d_currentPos, &state->d_ds->remote, &state->d_ds->sourceAddr, state->d_ds->sourceItf, socketFlags);
       if (sent == state->d_buffer.size()) {
         /* request sent ! */
         state->d_downstreamConnection->incQueries();
index 474b8b484b473a4e89c54767a9ad677e2f2d0f80..f58d0e31b2770cb2260ba261b1d4c2cb89580004 100644 (file)
@@ -290,14 +290,8 @@ void ComboAddress::truncate(unsigned int bits) noexcept
   *place &= (~((1<<bitsleft)-1));
 }
 
-size_t sendMsgWithTimeout(int fd, const char* buffer, size_t len, int idleTimeout, const ComboAddress* dest, const ComboAddress* local, unsigned int localItf, int totalTimeout, int flags)
+size_t sendMsgWithOptions(int fd, const char* buffer, size_t len, const ComboAddress* dest, const ComboAddress* local, unsigned int localItf, int flags)
 {
-  int remainingTime = totalTimeout;
-  time_t start = 0;
-  if (totalTimeout) {
-    start = time(nullptr);
-  }
-
   struct msghdr msgh;
   struct iovec iov;
   char cbuf[256];
@@ -349,10 +343,14 @@ size_t sendMsgWithTimeout(int fd, const char* buffer, size_t len, int idleTimeou
       }
 
       /* partial write */
+      firstTry = false;
       iov.iov_len -= written;
       iov.iov_base = reinterpret_cast<void*>(reinterpret_cast<char*>(iov.iov_base) + written);
       written = 0;
     }
+    else if (res == 0) {
+      return res;
+    }
     else if (res == -1) {
       if (errno == EINTR) {
         continue;
@@ -360,150 +358,20 @@ size_t sendMsgWithTimeout(int fd, const char* buffer, size_t len, int idleTimeou
       else if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINPROGRESS || errno == ENOTCONN) {
         /* EINPROGRESS might happen with non blocking socket,
            especially with TCP Fast Open */
-        if (totalTimeout <= 0 && idleTimeout <= 0) {
-          return sent;
-        }
-
-        if (firstTry) {
-          int res = waitForRWData(fd, false, (totalTimeout == 0 || idleTimeout <= remainingTime) ? idleTimeout : remainingTime, 0);
-          if (res > 0) {
-            /* there is room available */
-            firstTry = false;
-          }
-          else if (res == 0) {
-            throw runtime_error("Timeout while waiting to write data");
-          } else {
-            throw runtime_error("Error while waiting for room to write data");
-          }
-        }
-        else {
-          throw runtime_error("Timeout while waiting to write data");
-        }
+        return sent;
       }
       else {
         unixDie("failed in sendMsgWithTimeout");
       }
     }
-    if (totalTimeout) {
-      time_t now = time(nullptr);
-      int elapsed = now - start;
-      if (elapsed >= remainingTime) {
-        throw runtime_error("Timeout while sending data");
-      }
-      start = now;
-      remainingTime -= elapsed;
-    }
   }
-  while (firstTry);
+  while (true);
 
   return 0;
 }
 
 template class NetmaskTree<bool>;
 
-bool sendSizeAndMsgWithTimeout(int sock, uint16_t bufferLen, const char* buffer, int idleTimeout, const ComboAddress* dest, const ComboAddress* local, unsigned int localItf, int totalTimeout, int flags)
-{
-  uint16_t size = htons(bufferLen);
-  char cbuf[256];
-  struct msghdr msgh;
-  struct iovec iov[2];
-  int remainingTime = totalTimeout;
-  time_t start = 0;
-  if (totalTimeout) {
-    start = time(NULL);
-  }
-
-  /* Set up iov and msgh structures. */
-  memset(&msgh, 0, sizeof(struct msghdr));
-  msgh.msg_control = nullptr;
-  msgh.msg_controllen = 0;
-  if (dest) {
-    msgh.msg_name = reinterpret_cast<void*>(const_cast<ComboAddress*>(dest));
-    msgh.msg_namelen = dest->getSocklen();
-  }
-  else {
-    msgh.msg_name = nullptr;
-    msgh.msg_namelen = 0;
-  }
-
-  msgh.msg_flags = 0;
-
-  if (localItf != 0 && local) {
-    addCMsgSrcAddr(&msgh, cbuf, local, localItf);
-  }
-
-  iov[0].iov_base = &size;
-  iov[0].iov_len = sizeof(size);
-  iov[1].iov_base = reinterpret_cast<void*>(const_cast<char*>(buffer));
-  iov[1].iov_len = bufferLen;
-
-  size_t pos = 0;
-  size_t sent = 0;
-  size_t nbElements = sizeof(iov)/sizeof(*iov);
-  while (true) {
-    msgh.msg_iov = &iov[pos];
-    msgh.msg_iovlen = nbElements - pos;
-
-    ssize_t res = sendmsg(sock, &msgh, flags);
-    if (res > 0) {
-      size_t written = static_cast<size_t>(res);
-      sent += written;
-
-      if (sent == (sizeof(size) + bufferLen)) {
-        return true;
-      }
-      /* partial write, we need to keep only the (parts of) elements
-         that have not been written.
-      */
-      do {
-        if (written < iov[pos].iov_len) {
-          iov[pos].iov_len -= written;
-          iov[pos].iov_base = reinterpret_cast<void*>(reinterpret_cast<char*>(iov[pos].iov_base) + written);
-          written = 0;
-        }
-        else {
-          written -= iov[pos].iov_len;
-          iov[pos].iov_len = 0;
-          pos++;
-        }
-      }
-      while (written > 0 && pos < nbElements);
-    }
-    else if (res == -1) {
-      if (errno == EINTR) {
-        continue;
-      }
-      else if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINPROGRESS) {
-        /* EINPROGRESS might happen with non blocking socket,
-           especially with TCP Fast Open */
-        int ret = waitForRWData(sock, false, (totalTimeout == 0 || idleTimeout <= remainingTime) ? idleTimeout : remainingTime, 0);
-        if (ret > 0) {
-          /* there is room available */
-        }
-        else if (ret == 0) {
-          throw runtime_error("Timeout while waiting to send data");
-        } else {
-          throw runtime_error("Error while waiting for room to send data");
-        }
-      }
-      else {
-        unixDie("failed in sendSizeAndMsgWithTimeout");
-      }
-    }
-    if (totalTimeout) {
-      time_t now = time(NULL);
-      int elapsed = now - start;
-      if (elapsed >= remainingTime) {
-        throw runtime_error("Timeout while sending data");
-      }
-      start = now;
-      remainingTime -= elapsed;
-    }
-  }
-
-  return false;
-}
-
 /* requires a non-blocking socket.
    On Linux, we could use MSG_DONTWAIT on a blocking socket
    but this is not portable.
index 457b2b5971e332357275058bb2912d14167e24a0..18d6e881949cd5d23a62bece3e23a4b69ef5018f 100644 (file)
@@ -1059,8 +1059,8 @@ bool HarvestDestinationAddress(const struct msghdr* msgh, ComboAddress* destinat
 bool HarvestTimestamp(struct msghdr* msgh, struct timeval* tv);
 void fillMSGHdr(struct msghdr* msgh, struct iovec* iov, char* cbuf, size_t cbufsize, char* data, size_t datalen, ComboAddress* addr);
 ssize_t sendfromto(int sock, const char* data, size_t len, int flags, const ComboAddress& from, const ComboAddress& to);
-size_t sendMsgWithTimeout(int fd, const char* buffer, size_t len, int idleTimeout, const ComboAddress* dest, const ComboAddress* local, unsigned int localItf, int totalTimeout, int flags);
-bool sendSizeAndMsgWithTimeout(int sock, uint16_t bufferLen, const char* buffer, int idleTimeout, const ComboAddress* dest, const ComboAddress* local, unsigned int localItf, int totalTimeout, int flags);
+size_t sendMsgWithOptions(int fd, const char* buffer, size_t len, const ComboAddress* dest, const ComboAddress* local, unsigned int localItf, int flags);
+
 /* requires a non-blocking, connected TCP socket */
 bool isTCPSocketUsable(int sock);
 
index ec31ecff8da54512b85050d3ffa4ad12bd4239f7..061ab884a49f2c69cfef5acaa83fca2fee082c07 100644 (file)
@@ -275,20 +275,6 @@ public:
     }
   }
 
-  bool writeSizeAndMsg(const void* buffer, size_t bufferSize, unsigned int writeTimeout)
-  {
-    if (d_conn) {
-      uint16_t size = htons(bufferSize);
-      if (d_conn->write(&size, sizeof(size), writeTimeout) != sizeof(size)) {
-        return false;
-      }
-      return (d_conn->write(buffer, bufferSize, writeTimeout) == bufferSize);
-    }
-    else {
-      return sendSizeAndMsgWithTimeout(d_socket, bufferSize, static_cast<const char*>(buffer), writeTimeout, nullptr, nullptr, 0, 0, 0);
-    }
-  }
-
 private:
   std::unique_ptr<TLSConnection> d_conn{nullptr};
   int d_socket{-1};