[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master c265febd97e: Add support for TCP_NODELAY on network streams
From: |
Robert Pluim |
Subject: |
master c265febd97e: Add support for TCP_NODELAY on network streams |
Date: |
Fri, 13 Dec 2024 08:39:58 -0500 (EST) |
branch: master
commit c265febd97e940e6580ae42aa648358a0a2ed830
Author: Eric Marsden <eric.marsden@risk-engineering.org>
Commit: Robert Pluim <rpluim@gmail.com>
Add support for TCP_NODELAY on network streams
* src/process.c (socket_options): add entry for TCP_NODELAY.
* lisp/emacs-lisp/bytecomp.el: add :nodelay to valid keywords
for make-network-process compiler-macro.
* doc/lispref/processes.texi: document :nodelay keyword argument
to set-network-process-option and make-network-process.
(Bug#74793)
---
doc/lispref/processes.texi | 7 +++++++
lisp/emacs-lisp/bytecomp.el | 4 ++--
src/process.c | 5 +++++
3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index 79ef959ae65..e0d71ac22b6 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -3090,6 +3090,13 @@ listening on that port. If @var{reuseaddr-flag} is
@code{nil}, there
may be a period of time after the last use of that port (by any
process on the host) where it is not possible to make a new server on
that port.
+
+@item :nodelay @var{nodelay-flag}
+If @var{nodelay-flag} is non-@code{nil}, the @code{TCP_NODELAY} option
+is enabled on the socket. This disables the Nagle algorithm, meaning
+that network segments are sent as soon as possible, even when they
+contain little data. This reduces network latency on the network
+connection, but can lead to many small packets being sent.
@end table
@defun set-network-process-option process option value &optional no-error
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index f058fc48cc7..07eb4690fce 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -6049,8 +6049,8 @@ and corresponding effects."
:buffer :host :service :type :family :local :remote :coding
:nowait :noquery :stop :filter :filter-multibyte :sentinel
:log :plist :tls-parameters :server :broadcast :dontroute
- :keepalive :linger :oobinline :priority :reuseaddr :bindtodevice
- :use-external-socket)
+ :keepalive :linger :oobinline :priority :reuseaddr :nodelay
+ :bindtodevice :use-external-socket)
'(:name :service))))
(provide 'byte-compile)
diff --git a/src/process.c b/src/process.c
index b71ba3daf2d..cd1378f07ad 100644
--- a/src/process.c
+++ b/src/process.c
@@ -38,6 +38,7 @@ along with GNU Emacs. If not, see
<https://www.gnu.org/licenses/>. */
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
+#include <netinet/tcp.h>
#include <arpa/inet.h>
#else
@@ -2860,6 +2861,9 @@ static const struct socket_options {
#endif
#ifdef SO_REUSEADDR
{ ":reuseaddr", SOL_SOCKET, SO_REUSEADDR, SOPT_BOOL, OPIX_REUSEADDR },
+#endif
+#ifdef TCP_NODELAY
+ { ":nodelay", IPPROTO_TCP, TCP_NODELAY, SOPT_BOOL, OPIX_MISC },
#endif
{ 0, 0, 0, SOPT_UNKNOWN, OPIX_NONE }
};
@@ -3899,6 +3903,7 @@ The following network options can be specified for this
connection:
:broadcast BOOL -- Allow send and receive of datagram broadcasts.
:dontroute BOOL -- Only send to directly connected hosts.
:keepalive BOOL -- Send keep-alive messages on network stream.
+:nodelay BOOL -- Set TCP_NODELAY on the network socket.
:linger BOOL or TIMEOUT -- Send queued messages before closing.
:oobinline BOOL -- Place out-of-band data in receive data stream.
:priority INT -- Set protocol defined priority for sent packets.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master c265febd97e: Add support for TCP_NODELAY on network streams,
Robert Pluim <=