]> code.delx.au - gnu-emacs/commitdiff
Don't include des.h (or variants thereof); krb.h will do it.
authorKen Raeburn <raeburn@raeburn.org>
Wed, 13 Jul 2005 21:47:54 +0000 (21:47 +0000)
committerKen Raeburn <raeburn@raeburn.org>
Wed, 13 Jul 2005 21:47:54 +0000 (21:47 +0000)
(sendline): Add the \r\n to the line in a temporary buffer, and write it all at
once.

lib-src/ChangeLog
lib-src/pop.c

index bd6949c799c5f821d9f899d789acd16dda89d6db..dd4dc62a562973ad00dbfe8144fd148c65ed1149 100644 (file)
@@ -1,3 +1,10 @@
+2005-07-13  Ken Raeburn  <raeburn@gnu.org>
+
+       * pop.c: Don't include des.h (or variants thereof); krb.h will do
+       it.
+       (sendline): Add the \r\n to the line in a temporary buffer, and
+       write it all at once.
+
 2005-07-04  Lute Kamstra  <lute@gnu.org>
 
        Update FSF's address in GPL notices.
index 9a85ba3746c387fd32c9b3f83c91ef23ec7048b8..30a4233d417762c0206c935f22b5033c2e428c6f 100644 (file)
@@ -76,17 +76,6 @@ extern struct servent *hes_getservbyname (/* char *, char * */);
 # ifdef HAVE_KRB5_H
 #  include <krb5.h>
 # endif
-# ifdef HAVE_DES_H
-#  include <des.h>
-# else
-#  ifdef HAVE_KERBEROSIV_DES_H
-#   include <kerberosIV/des.h>
-#  else
-#   ifdef HAVE_KERBEROS_DES_H
-#    include <kerberos/des.h>
-#   endif
-#  endif
-# endif
 # ifdef HAVE_KRB_H
 #  include <krb.h>
 # else
@@ -1403,12 +1392,24 @@ sendline (server, line)
 {
 #define SENDLINE_ERROR "Error writing to POP server: "
   int ret;
-
-  ret = fullwrite (server->file, line, strlen (line));
-  if (ret >= 0)
-    {                          /* 0 indicates that a blank line was written */
-      ret = fullwrite (server->file, "\r\n", 2);
-    }
+  char *buf;
+
+  /* Combine the string and the CR-LF into one buffer.  Otherwise, two
+     reasonable network stack optimizations, Nagle's algorithm and
+     delayed acks, combine to delay us a fraction of a second on every
+     message we send.  (Movemail writes line without \r\n, client
+     kernel sends packet, server kernel delays the ack to see if it
+     can combine it with data, movemail writes \r\n, client kernel
+     waits because it has unacked data already in its outgoing queue,
+     client kernel eventually times out and sends.)
+
+     This can be something like 0.2s per command, which can add up
+     over a few dozen messages, and is a big chunk of the time we
+     spend fetching mail from a server close by.  */
+  buf = alloca (strlen (line) + 3);
+  strcpy (buf, line);
+  strcat (buf, "\r\n");
+  ret = fullwrite (server->file, buf, strlen (buf));
 
   if (ret < 0)
     {