aboutsummaryrefslogtreecommitdiff
path: root/jim-aio.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2017-04-20 14:01:10 +1000
committerSteve Bennett <steveb@workware.net.au>2017-04-20 14:07:51 +1000
commit250abd9c392f1e7348274aee5e0ebd3a88c21219 (patch)
tree716e6613589291a030a8e0e0e8c481621394845f /jim-aio.c
parentf70a68adacf612988a3c3e0045017c262248dbd0 (diff)
downloadjimtcl-250abd9c392f1e7348274aee5e0ebd3a88c21219.zip
jimtcl-250abd9c392f1e7348274aee5e0ebd3a88c21219.tar.gz
jimtcl-250abd9c392f1e7348274aee5e0ebd3a88c21219.tar.bz2
aio: Add support for TCP_NODELAY
Enable or disable Nagle's algorigthm Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-aio.c')
-rw-r--r--jim-aio.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/jim-aio.c b/jim-aio.c
index f56c318..3fd027f 100644
--- a/jim-aio.c
+++ b/jim-aio.c
@@ -56,6 +56,7 @@
#if defined(HAVE_SYS_SOCKET_H) && defined(HAVE_SELECT) && defined(HAVE_NETINET_IN_H) && defined(HAVE_NETDB_H) && defined(HAVE_ARPA_INET_H)
#include <sys/socket.h>
#include <netinet/in.h>
+#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
#ifdef HAVE_SYS_UN_H
@@ -943,6 +944,22 @@ static int aio_cmd_ndelay(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
}
#endif
+#ifdef TCP_NODELAY
+static int aio_cmd_tcp_nodelay(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
+{
+ AioFile *af = Jim_CmdPrivData(interp);
+ int on;
+
+ if (Jim_GetBoolean(interp, argv[0], &on) != JIM_OK) {
+ return JIM_ERR;
+ }
+ setsockopt(af->fd, IPPROTO_TCP, TCP_NODELAY, (void *)&on, sizeof(on));
+
+ return JIM_OK;
+}
+#endif
+
+
#ifdef HAVE_FSYNC
static int aio_cmd_sync(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
@@ -1375,6 +1392,15 @@ static const jim_subcmd_type aio_command_table[] = {
/* Description: Set O_NDELAY (if arg). Returns current/new setting. */
},
#endif
+#ifdef TCP_NODELAY
+ { "tcp_nodelay",
+ "boolean",
+ aio_cmd_tcp_nodelay,
+ 1,
+ 1,
+ /* Description: Set TCP_NODELAY (Nagle's algorithm) */
+ },
+#endif
#ifdef HAVE_FSYNC
{ "sync",
NULL,