aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2020-04-17 10:57:46 +0200
committerOliver Smith <osmith@sysmocom.de>2020-04-17 10:57:46 +0200
commit24a3d6060b01e930019e8d0bd0a9c3fcc6b7f804 (patch)
treeeba91d96b149226c0a8d67289e02e578f6e52e96
parent73a73c0381beebef3e2a7d88fd612383dfb2bf44 (diff)
src/input/ipaccess.c: set TCP_NODELAYosmith/abis-loadtest
Set TCP_NODELAY for all RSL/OML sockets. Related: SYS#4906 Change-Id: Ia3d4c41bf0659e682f0b7ae5f3d58ed0f28edb58
-rw-r--r--src/input/ipaccess.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/input/ipaccess.c b/src/input/ipaccess.c
index e1936af..4d21416 100644
--- a/src/input/ipaccess.c
+++ b/src/input/ipaccess.c
@@ -271,6 +271,7 @@ static int ipaccess_rcvmsg(struct e1inp_line *line, struct msgb *msg,
struct e1inp_ts *ts;
struct osmo_fd *newbfd;
struct e1inp_line *new_line;
+ int on = 1;
sign_link =
line->ops->sign_link_up(&unit_data, line,
@@ -309,6 +310,13 @@ static int ipaccess_rcvmsg(struct e1inp_line *line, struct msgb *msg,
"could not register FD\n");
goto err;
}
+
+ /* set TCP_NODELAY (FIXME: just call update_fd_settings() here instead?) */
+ ret = setsockopt(newbfd->fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
+ if (ret < 0)
+ LOGP(DLINP, LOGL_ERROR, "Failed to set TCP_NODELAY: %s\n", strerror(errno));
+
+
/* now we can release the dummy RSL line. */
e1inp_line_put(line);
@@ -587,6 +595,11 @@ static void update_fd_settings(struct e1inp_line *line, int fd)
#endif
#endif
}
+
+ val = 1;
+ ret = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val));
+ if (ret < 0)
+ LOGP(DLINP, LOGL_ERROR, "Failed to set TCP_NODELAY: %s\n", strerror(errno));
}
/* callback of the OML listening filedescriptor */