From 47359059aacef9016e097148b8a82ac1957e4878 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Tue, 20 Apr 2021 14:02:18 +0100 Subject: [PATCH] network: Add timeout argument to create_socket() Instead of hardcoding a DEFAULT_TIMEOUT_MS timeout value in create_socket(), get the timeout as an argument to the function. This requires all callers that don't have access to the timeout value to be modified to receive this value as a function argument. Signed-off-by: Paul Cercueil --- dns_sd.c | 11 ++++++++++- dns_sd.h | 4 ---- network.c | 15 +++++++-------- network.h | 1 + 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/dns_sd.c b/dns_sd.c index 6032a2c44..1185af406 100644 --- a/dns_sd.c +++ b/dns_sd.c @@ -15,6 +15,7 @@ #include "dns_sd.h" #include "iio-lock.h" #include "iio-private.h" +#include "network.h" #ifdef _WIN32 #include @@ -32,6 +33,8 @@ #define close(s) closesocket(s) #endif +#define DEFAULT_TIMEOUT_MS 5000 + static void dnssd_free_discovery_data(struct dns_sd_discovery_data *d) { free(d->hostname); @@ -173,8 +176,14 @@ void port_knock_discovery_data(const struct iio_context_params *params, struct dns_sd_discovery_data **ddata) { struct dns_sd_discovery_data *d, *ndata; + unsigned int timeout_ms; int i, ret; + if (params->timeout_ms) + timeout_ms = params->timeout_ms; + else + timeout_ms = DEFAULT_TIMEOUT_MS; + d = *ddata; iio_mutex_lock(d->lock); for (i = 0, ndata = d; ndata->next != NULL; ) { @@ -197,7 +206,7 @@ void port_knock_discovery_data(const struct iio_context_params *params, gai_strerror(ret)); } else { for (rp = res; rp != NULL; rp = rp->ai_next) { - fd = create_socket(rp); + fd = create_socket(rp, timeout_ms); if (fd < 0) { IIO_DEBUG("Unable to open %s%s socket ('%s:%d' %s)\n", rp->ai_family == AF_INET ? "ipv4" : "", diff --git a/dns_sd.h b/dns_sd.h index b7b8e7e2f..567b79c9d 100644 --- a/dns_sd.h +++ b/dns_sd.h @@ -56,10 +56,6 @@ struct dns_sd_cb_data { const struct iio_context_params *params; }; -/* This functions is implemented in network.c, but used in dns_sd.c - */ -int create_socket(const struct addrinfo *addrinfo); - /* These functions are common, and implemented in dns_sd_[*].c based on the * implementations: avahi (linux), bonjour (mac), or ServiceDiscovery (Win10) */ diff --git a/network.c b/network.c index 94db03bd2..4df180c00 100644 --- a/network.c +++ b/network.c @@ -207,9 +207,8 @@ static int do_connect(int fd, const struct addrinfo *addrinfo, return 0; } -int create_socket(const struct addrinfo *addrinfo) +int create_socket(const struct addrinfo *addrinfo, unsigned int timeout) { - const unsigned int timeout = DEFAULT_TIMEOUT_MS; int ret, fd, yes = 1; fd = do_create_socket(addrinfo); @@ -303,7 +302,7 @@ static int network_open(const struct iio_device *dev, if (ppdata->io_ctx.fd >= 0) goto out_mutex_unlock; - ret = create_socket(pdata->addrinfo); + ret = create_socket(pdata->addrinfo, DEFAULT_TIMEOUT_MS); if (ret < 0) { IIO_ERROR("Create socket: %d\n", ret); goto out_mutex_unlock; @@ -1007,8 +1006,8 @@ struct iio_context * network_create_context(const struct iio_context_params *par struct iio_context *ctx; struct iiod_client *iiod_client; struct iio_context_pdata *pdata; + unsigned int i, timeout_ms = DEFAULT_TIMEOUT_MS; size_t uri_len; - unsigned int i; int fd, ret; char *description, *uri; #ifdef _WIN32 @@ -1084,7 +1083,7 @@ struct iio_context * network_create_context(const struct iio_context_params *par return NULL; } - fd = create_socket(res); + fd = create_socket(res, timeout_ms); if (fd < 0) { errno = -fd; goto err_free_addrinfo; @@ -1107,7 +1106,7 @@ struct iio_context * network_create_context(const struct iio_context_params *par pdata->iiod_client = iiod_client; pdata->io_ctx.fd = fd; pdata->addrinfo = res; - pdata->io_ctx.timeout_ms = DEFAULT_TIMEOUT_MS; + pdata->io_ctx.timeout_ms = timeout_ms; pdata->msg_trunc_supported = msg_trunc_supported(&pdata->io_ctx); if (pdata->msg_trunc_supported) @@ -1161,7 +1160,7 @@ struct iio_context * network_create_context(const struct iio_context_params *par } dev->pdata->io_ctx.fd = -1; - dev->pdata->io_ctx.timeout_ms = DEFAULT_TIMEOUT_MS; + dev->pdata->io_ctx.timeout_ms = timeout_ms; #ifdef WITH_NETWORK_GET_BUFFER dev->pdata->memfd = -1; #endif @@ -1193,7 +1192,7 @@ struct iio_context * network_create_context(const struct iio_context_params *par free(uri); iiod_client_set_timeout(pdata->iiod_client, &pdata->io_ctx, - calculate_remote_timeout(DEFAULT_TIMEOUT_MS)); + calculate_remote_timeout(timeout_ms)); return ctx; err_free_uri: diff --git a/network.h b/network.h index bc536d39f..49166679d 100644 --- a/network.h +++ b/network.h @@ -30,6 +30,7 @@ void cleanup_cancel(struct iiod_client_pdata *io_ctx); void do_cancel(struct iiod_client_pdata *io_ctx); int wait_cancellable(struct iiod_client_pdata *io_ctx, bool read); +int create_socket(const struct addrinfo *addrinfo, unsigned int timeout); int do_create_socket(const struct addrinfo *addrinfo); int do_select(int fd, unsigned int timeout);