X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Fsessiond-comm.c;h=0067be1636ecca662e52e5eb569adfbd0cd5fa98;hb=2a85be8e0e679da996b48252b1d9aebb9bb29126;hp=58a7ffb509a83fd423bdb418fa354fbdd110ee9f;hpb=554831e798d0646f5d8c261b6207527c5f839222;p=lttng-tools.git diff --git a/src/common/sessiond-comm/sessiond-comm.c b/src/common/sessiond-comm/sessiond-comm.c index 58a7ffb50..0067be163 100644 --- a/src/common/sessiond-comm/sessiond-comm.c +++ b/src/common/sessiond-comm/sessiond-comm.c @@ -16,7 +16,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -26,13 +26,14 @@ #include #include #include +#include #include #include "sessiond-comm.h" /* For Unix socket */ -#include "unix.h" +#include /* For Inet socket */ #include "inet.h" /* For Inet6 socket */ @@ -373,6 +374,93 @@ error: return NULL; } +/* + * Set socket receiving timeout. + */ +LTTNG_HIDDEN +int lttcomm_setsockopt_rcv_timeout(int sock, unsigned int msec) +{ + int ret; + struct timeval tv; + + tv.tv_sec = msec / 1000; + tv.tv_usec = (msec % 1000) * 1000; + + ret = setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); + if (ret < 0) { + PERROR("setsockopt SO_RCVTIMEO"); + } + + return ret; +} + +/* + * Set socket sending timeout. + */ +LTTNG_HIDDEN +int lttcomm_setsockopt_snd_timeout(int sock, unsigned int msec) +{ + int ret; + struct timeval tv; + + tv.tv_sec = msec / 1000; + tv.tv_usec = (msec % 1000) * 1000; + + ret = setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); + if (ret < 0) { + PERROR("setsockopt SO_SNDTIMEO"); + } + + return ret; +} + +LTTNG_HIDDEN +int lttcomm_sock_get_port(const struct lttcomm_sock *sock, uint16_t *port) +{ + assert(sock); + assert(port); + assert(sock->sockaddr.type == LTTCOMM_INET || + sock->sockaddr.type == LTTCOMM_INET6); + assert(sock->proto == LTTCOMM_SOCK_TCP || + sock->proto == LTTCOMM_SOCK_UDP); + + switch (sock->sockaddr.type) { + case LTTCOMM_INET: + *port = ntohs(sock->sockaddr.addr.sin.sin_port); + break; + case LTTCOMM_INET6: + *port = ntohs(sock->sockaddr.addr.sin6.sin6_port); + break; + default: + abort(); + } + + return 0; +} + +LTTNG_HIDDEN +int lttcomm_sock_set_port(struct lttcomm_sock *sock, uint16_t port) +{ + assert(sock); + assert(sock->sockaddr.type == LTTCOMM_INET || + sock->sockaddr.type == LTTCOMM_INET6); + assert(sock->proto == LTTCOMM_SOCK_TCP || + sock->proto == LTTCOMM_SOCK_UDP); + + switch (sock->sockaddr.type) { + case LTTCOMM_INET: + sock->sockaddr.addr.sin.sin_port = htons(port); + break; + case LTTCOMM_INET6: + sock->sockaddr.addr.sin6.sin6_port = htons(port); + break; + default: + abort(); + } + + return 0; +} + LTTNG_HIDDEN void lttcomm_init(void) {