maillock.h \
netgroup.h \
netinet/in6_machtypes.h \
+ netinet/tcp.h \
pthread.h \
pty.h \
sac.h \
/* Define to 1 if you have the <netinet/in.h> header file. */
/* #define HAVE_NETINET_IN_H 1 */
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+/* #define HAVE_NETINET_TCP_H 1 */
+
/* Define to 1 if you have the <netinet/in_systm.h> header file. */
/* #define HAVE_NETINET_IN_SYSTM_H 1 */
* own krb5_recvauth().
*/
socket_set_nonblocking(s->fd, 1);
+
+ /*
+ * We write message lengths separately from the payload, and may do
+ * back-to-back small writes when flushing pending input and then a new
+ * update. Avoid Nagle delays.
+ */
+#if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
+ {
+ int nodelay = 1;
+ (void) setsockopt(s->fd, IPPROTO_TCP, TCP_NODELAY,
+ (void *)&nodelay, sizeof(nodelay));
+ }
+#endif
+
krb5_free_principal (context, server);
if (ret) {
krb5_warn (context, ret, "krb5_recvauth");
if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof(one)) < 0)
krb5_warn(context, errno, "setsockopt(SO_KEEPALIVE) failed");
+ /*
+ * We write message lengths separately from the payload, avoid Nagle
+ * delays.
+ */
+#if defined(IPPROTO_TCP) && defined(TCP_NODELAY)
+ (void) setsockopt(s, IPPROTO_TCP, TCP_NODELAY,
+ (void *)&one, sizeof(one));
+#endif
+
return s;
}
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>
+#endif
#ifdef HAVE_SYS_UN_H
#include <sys/un.h>
#endif