aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/iscsid
diff options
context:
space:
mode:
authorRichard Scheffenegger <rscheff@FreeBSD.org>2022-02-25 09:33:59 +0000
committerRichard Scheffenegger <rscheff@FreeBSD.org>2022-02-25 09:35:47 +0000
commitbd6bb4939714bf8bf9cf180ffd4ff55cd876d643 (patch)
treeea2374b038a9c5e47d69e5a83e6e064d7cd2c66f /usr.sbin/iscsid
parent05c3e8e87142a8689503a6731237b48fb43c1bec (diff)
Diffstat (limited to 'usr.sbin/iscsid')
-rw-r--r--usr.sbin/iscsid/iscsid.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/usr.sbin/iscsid/iscsid.c b/usr.sbin/iscsid/iscsid.c
index 2689c4a2b455..ebfcfa34dd6d 100644
--- a/usr.sbin/iscsid/iscsid.c
+++ b/usr.sbin/iscsid/iscsid.c
@@ -38,9 +38,11 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/linker.h>
#include <sys/socket.h>
+#include <sys/sysctl.h>
#include <sys/capsicum.h>
#include <sys/wait.h>
#include <netinet/in.h>
+#include <netinet/tcp.h>
#include <assert.h>
#include <capsicum_helpers.h>
#include <errno.h>
@@ -383,6 +385,32 @@ connection_new(int iscsi_fd, const struct iscsi_daemon_request *request)
from_addr);
}
}
+ /*
+ * Reduce TCP SYN_SENT timeout while
+ * no connectivity exists, to allow
+ * rapid reuse of the available slots.
+ */
+ int keepinit = 0;
+ if (conn->conn_conf.isc_login_timeout > 0) {
+ keepinit = conn->conn_conf.isc_login_timeout;
+ log_debugx("session specific LoginTimeout at %d sec",
+ keepinit);
+ }
+ if (conn->conn_conf.isc_login_timeout == -1) {
+ char value[8];
+ size_t size = sizeof(value);
+ sysctlbyname("kern.iscsi.login_timeout", &value, &size,
+ NULL, 0);
+ keepinit = strtol(value, NULL, 10);
+ log_debugx("global login_timeout at %d sec", keepinit);
+ }
+ if (keepinit > 0) {
+ if (setsockopt(conn->conn.conn_socket,
+ IPPROTO_TCP, TCP_KEEPINIT,
+ &keepinit, sizeof(keepinit)) == -1)
+ log_warnx("setsockopt(TCP_KEEPINIT) "
+ "failed for %s", to_addr);
+ }
if (from_ai != NULL) {
error = bind(conn->conn.conn_socket, from_ai->ai_addr,
from_ai->ai_addrlen);