X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Finet.c;h=93fb19bb51acb611cf9a4fd4d9af2b6532acd5cc;hp=57ffbe45c28ed1ae68bded38f4713f901a23deb1;hb=7966af5763c4aaca39df9bbfa9277ff15715c720;hpb=c2e8c3663b99ba900f4733696c70e7a5e32ae1a7 diff --git a/src/common/sessiond-comm/inet.c b/src/common/sessiond-comm/inet.c index 57ffbe45c..93fb19bb5 100644 --- a/src/common/sessiond-comm/inet.c +++ b/src/common/sessiond-comm/inet.c @@ -1,22 +1,11 @@ /* - * Copyright (C) 2012 - David Goulet + * Copyright (C) 2012 David Goulet * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License, version 2 only, as - * published by the Free Software Foundation. + * SPDX-License-Identifier: GPL-2.0-only * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #define _LGPL_SOURCE -#include #include #include #include @@ -24,13 +13,13 @@ #include #include #include -#include #include #include #include #include #include +#include #include "inet.h" @@ -54,7 +43,6 @@ unsigned long lttcomm_inet_tcp_timeout; /* * Creates an PF_INET socket. */ -LTTNG_HIDDEN int lttcomm_create_inet_sock(struct lttcomm_sock *sock, int type, int proto) { int val = 1, ret; @@ -97,19 +85,19 @@ error: /* * Bind socket and return. */ -LTTNG_HIDDEN int lttcomm_bind_inet_sock(struct lttcomm_sock *sock) { - return bind(sock->fd, - (const struct sockaddr *) &sock->sockaddr.addr.sin, - sizeof(sock->sockaddr.addr.sin)); + struct sockaddr_in sockaddr = sock->sockaddr.addr.sin; + + return bind(sock->fd, &sockaddr, sizeof(sockaddr)); } static int connect_no_timeout(struct lttcomm_sock *sock) { - return connect(sock->fd, (struct sockaddr *) &sock->sockaddr.addr.sin, - sizeof(sock->sockaddr.addr.sin)); + struct sockaddr_in sockaddr = sock->sockaddr.addr.sin; + + return connect(sock->fd, &sockaddr, sizeof(sockaddr)); } static @@ -119,6 +107,7 @@ int connect_with_timeout(struct lttcomm_sock *sock) int ret, flags, connect_ret; struct timespec orig_time, cur_time; unsigned long diff_ms; + struct sockaddr_in sockaddr; ret = fcntl(sock->fd, F_GETFL, 0); if (ret == -1) { @@ -140,12 +129,10 @@ int connect_with_timeout(struct lttcomm_sock *sock) return -1; } - connect_ret = connect(sock->fd, - (struct sockaddr *) &sock->sockaddr.addr.sin, - sizeof(sock->sockaddr.addr.sin)); - if (connect_ret == -1 && errno != EAGAIN - && errno != EWOULDBLOCK - && errno != EINPROGRESS) { + sockaddr = sock->sockaddr.addr.sin; + connect_ret = connect(sock->fd, &sockaddr, sizeof(sockaddr)); + if (connect_ret == -1 && errno != EAGAIN && errno != EWOULDBLOCK && + errno != EINPROGRESS) { goto error; } else if (!connect_ret) { /* Connect succeeded */ @@ -224,7 +211,6 @@ error: /* * Connect PF_INET socket. */ -LTTNG_HIDDEN int lttcomm_connect_inet_sock(struct lttcomm_sock *sock) { int ret, closeret; @@ -254,13 +240,13 @@ error_connect: * Do an accept(2) on the sock and return the new lttcomm socket. The socket * MUST be bind(2) before. */ -LTTNG_HIDDEN 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; + struct sockaddr_in new_addr = {}; if (sock->proto == LTTCOMM_SOCK_UDP) { /* @@ -275,15 +261,15 @@ struct lttcomm_sock *lttcomm_accept_inet_sock(struct lttcomm_sock *sock) goto error; } - len = sizeof(new_sock->sockaddr.addr.sin); + len = sizeof(new_addr); /* Blocking call */ - new_fd = accept(sock->fd, (struct sockaddr *) &new_sock->sockaddr.addr.sin, - &len); + new_fd = accept(sock->fd, (struct sockaddr *) &new_addr, &len); if (new_fd < 0) { PERROR("accept inet"); goto error; } + new_sock->sockaddr.addr.sin = new_addr; timeout = lttcomm_get_network_timeout(); if (timeout) { int ret; @@ -317,7 +303,6 @@ error: /* * Make the socket listen using LTTNG_SESSIOND_COMM_MAX_LISTEN. */ -LTTNG_HIDDEN int lttcomm_listen_inet_sock(struct lttcomm_sock *sock, int backlog) { int ret; @@ -348,7 +333,6 @@ end: * * Return the size of received data. */ -LTTNG_HIDDEN ssize_t lttcomm_recvmsg_inet_sock(struct lttcomm_sock *sock, void *buf, size_t len, int flags) { @@ -356,6 +340,7 @@ ssize_t lttcomm_recvmsg_inet_sock(struct lttcomm_sock *sock, void *buf, struct iovec iov[1]; ssize_t ret = -1; size_t len_last; + struct sockaddr_in addr = sock->sockaddr.addr.sin; memset(&msg, 0, sizeof(msg)); @@ -364,7 +349,7 @@ ssize_t lttcomm_recvmsg_inet_sock(struct lttcomm_sock *sock, void *buf, msg.msg_iov = iov; msg.msg_iovlen = 1; - msg.msg_name = (struct sockaddr *) &sock->sockaddr.addr.sin; + msg.msg_name = (struct sockaddr *) &addr; msg.msg_namelen = sizeof(sock->sockaddr.addr.sin); do { @@ -376,7 +361,7 @@ ssize_t lttcomm_recvmsg_inet_sock(struct lttcomm_sock *sock, void *buf, } iov[0].iov_base += ret; iov[0].iov_len -= ret; - assert(ret <= len_last); + LTTNG_ASSERT(ret <= len_last); } } while ((ret > 0 && ret < len_last) || (ret < 0 && errno == EINTR)); @@ -404,7 +389,6 @@ end: * * Return the size of sent data. */ -LTTNG_HIDDEN ssize_t lttcomm_sendmsg_inet_sock(struct lttcomm_sock *sock, const void *buf, size_t len, int flags) { @@ -421,9 +405,13 @@ ssize_t lttcomm_sendmsg_inet_sock(struct lttcomm_sock *sock, const void *buf, switch (sock->proto) { case LTTCOMM_SOCK_UDP: - msg.msg_name = (struct sockaddr *) &sock->sockaddr.addr.sin; + { + struct sockaddr_in addr = sock->sockaddr.addr.sin; + + msg.msg_name = (struct sockaddr *) &addr; msg.msg_namelen = sizeof(sock->sockaddr.addr.sin); break; + } default: break; } @@ -447,7 +435,6 @@ ssize_t lttcomm_sendmsg_inet_sock(struct lttcomm_sock *sock, const void *buf, /* * Shutdown cleanly and close. */ -LTTNG_HIDDEN int lttcomm_close_inet_sock(struct lttcomm_sock *sock) { int ret; @@ -515,7 +502,6 @@ error: return val; } -LTTNG_HIDDEN void lttcomm_inet_init(void) { unsigned long syn_retries, fin_timeout, syn_timeout, env;