X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Finet.c;h=b5a016e6f54fd46e3eb297b02c94c192cefe995a;hp=eb0c4fde3f6972de1d846020f10aa58a0deaad35;hb=d831c2497e9e8b2360cbe2026fdb2d736fa07641;hpb=3757b38542c2ce30ee7319a85662153de08e7f9a diff --git a/src/common/sessiond-comm/inet.c b/src/common/sessiond-comm/inet.c index eb0c4fde3..b5a016e6f 100644 --- a/src/common/sessiond-comm/inet.c +++ b/src/common/sessiond-comm/inet.c @@ -50,6 +50,8 @@ static const struct lttcomm_proto_ops inet_ops = { .sendmsg = lttcomm_sendmsg_inet_sock, }; +unsigned long lttcomm_inet_tcp_timeout; + /* * Creates an PF_INET socket. */ @@ -448,3 +450,68 @@ int lttcomm_close_inet_sock(struct lttcomm_sock *sock) return ret; } + +/* + * Return value read from /proc or else 0 if value is not found. + */ +static unsigned long read_proc_value(const char *path) +{ + int ret, fd; + long r_val; + unsigned long val = 0; + char buf[64]; + + fd = open(path, O_RDONLY); + if (fd < 0) { + goto error; + } + + ret = read(fd, buf, sizeof(buf)); + if (ret < 0) { + PERROR("read proc failed"); + goto error_close; + } + + errno = 0; + r_val = strtol(buf, NULL, 10); + if (errno != 0 || r_val < -1L) { + val = 0; + goto error_close; + } else { + if (r_val > 0) { + val = r_val; + } + } + +error_close: + ret = close(fd); + if (ret) { + PERROR("close /proc value"); + } +error: + return val; +} + +LTTNG_HIDDEN +void lttcomm_inet_init(void) +{ + unsigned long syn_retries, fin_timeout, syn_timeout; + + /* Assign default value and see if we can change it. */ + lttcomm_inet_tcp_timeout = DEFAULT_INET_TCP_TIMEOUT; + + syn_retries = read_proc_value(LTTCOMM_INET_PROC_SYN_RETRIES_PATH); + fin_timeout = read_proc_value(LTTCOMM_INET_PROC_FIN_TIMEOUT_PATH); + + syn_timeout = syn_retries * LTTCOMM_INET_SYN_TIMEOUT_FACTOR; + + /* + * Get the maximum between the two possible timeout value and use that to + * get the maximum with the default timeout. + */ + lttcomm_inet_tcp_timeout = max_t(unsigned long, + max_t(unsigned long, syn_timeout, fin_timeout), + lttcomm_inet_tcp_timeout); + + DBG("TCP inet operation timeout set to %lu sec", lttcomm_inet_tcp_timeout); +}