diff options
| author | Richard Scheffenegger <rscheff@FreeBSD.org> | 2022-02-25 09:33:59 +0000 |
|---|---|---|
| committer | Richard Scheffenegger <rscheff@FreeBSD.org> | 2022-02-25 09:35:47 +0000 |
| commit | bd6bb4939714bf8bf9cf180ffd4ff55cd876d643 (patch) | |
| tree | ea2374b038a9c5e47d69e5a83e6e064d7cd2c66f /usr.sbin/iscsid | |
| parent | 05c3e8e87142a8689503a6731237b48fb43c1bec (diff) | |
Diffstat (limited to 'usr.sbin/iscsid')
| -rw-r--r-- | usr.sbin/iscsid/iscsid.c | 28 |
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); |
