X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Finet.c;h=2703a666e71e557c10b956bb2c0402d89ca1aec9;hp=b5a016e6f54fd46e3eb297b02c94c192cefe995a;hb=6c1c0768320135c6936c371b09731851b508c023;hpb=d831c2497e9e8b2360cbe2026fdb2d736fa07641 diff --git a/src/common/sessiond-comm/inet.c b/src/common/sessiond-comm/inet.c index b5a016e6f..2703a666e 100644 --- a/src/common/sessiond-comm/inet.c +++ b/src/common/sessiond-comm/inet.c @@ -16,6 +16,7 @@ */ #define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -275,6 +276,7 @@ struct lttcomm_sock *lttcomm_accept_inet_sock(struct lttcomm_sock *sock) int new_fd; socklen_t len; struct lttcomm_sock *new_sock; + unsigned long timeout; if (sock->proto == LTTCOMM_SOCK_UDP) { /* @@ -298,6 +300,19 @@ struct lttcomm_sock *lttcomm_accept_inet_sock(struct lttcomm_sock *sock) PERROR("accept inet"); goto error; } + timeout = lttcomm_get_network_timeout(); + if (timeout) { + int ret; + + ret = lttcomm_setsockopt_rcv_timeout(new_fd, timeout); + if (ret) { + goto error_close; + } + ret = lttcomm_setsockopt_snd_timeout(new_fd, timeout); + if (ret) { + goto error_close; + } + } new_sock->fd = new_fd; new_sock->ops = &inet_ops; @@ -305,6 +320,11 @@ struct lttcomm_sock *lttcomm_accept_inet_sock(struct lttcomm_sock *sock) end: return new_sock; +error_close: + if (close(new_fd) < 0) { + PERROR("accept inet close fd"); + } + error: free(new_sock); return NULL; @@ -457,6 +477,7 @@ int lttcomm_close_inet_sock(struct lttcomm_sock *sock) static unsigned long read_proc_value(const char *path) { int ret, fd; + ssize_t size_ret; long r_val; unsigned long val = 0; char buf[64]; @@ -466,11 +487,16 @@ static unsigned long read_proc_value(const char *path) goto error; } - ret = read(fd, buf, sizeof(buf)); - if (ret < 0) { + size_ret = lttng_read(fd, buf, sizeof(buf)); + /* + * Allow reading a file smaller than buf, but keep space for + * final \0. + */ + if (size_ret < 0 || size_ret >= sizeof(buf)) { PERROR("read proc failed"); goto error_close; } + buf[size_ret] = '\0'; errno = 0; r_val = strtol(buf, NULL, 10); @@ -495,7 +521,13 @@ error: LTTNG_HIDDEN void lttcomm_inet_init(void) { - unsigned long syn_retries, fin_timeout, syn_timeout; + unsigned long syn_retries, fin_timeout, syn_timeout, env; + + env = lttcomm_get_network_timeout(); + if (env) { + lttcomm_inet_tcp_timeout = env; + goto end; + } /* Assign default value and see if we can change it. */ lttcomm_inet_tcp_timeout = DEFAULT_INET_TCP_TIMEOUT; @@ -513,5 +545,6 @@ void lttcomm_inet_init(void) max_t(unsigned long, syn_timeout, fin_timeout), lttcomm_inet_tcp_timeout); +end: DBG("TCP inet operation timeout set to %lu sec", lttcomm_inet_tcp_timeout); }