aboutgitcodebugslistschat
diff options
context:
space:
mode:
-rw-r--r--tcp.c24
-rw-r--r--tcp_conn.h2
-rw-r--r--tcp_splice.c16
3 files changed, 31 insertions, 11 deletions
diff --git a/tcp.c b/tcp.c
index d49210b..044c57f 100644
--- a/tcp.c
+++ b/tcp.c
@@ -3007,8 +3007,10 @@ static int tcp_ns_socks_init(void *arg)
* @c: Execution context
* @pool: Pool of sockets to refill
* @af: Address family to use
+ *
+ * Return: 0 on success, negative error code if there was at least one error
*/
-void tcp_sock_refill_pool(const struct ctx *c, int pool[], sa_family_t af)
+int tcp_sock_refill_pool(const struct ctx *c, int pool[], sa_family_t af)
{
int i;
@@ -3017,8 +3019,10 @@ void tcp_sock_refill_pool(const struct ctx *c, int pool[], sa_family_t af)
continue;
if ((pool[i] = tcp_conn_new_sock(c, af)) < 0)
- break;
+ return pool[i];
}
+
+ return 0;
}
/**
@@ -3027,10 +3031,18 @@ void tcp_sock_refill_pool(const struct ctx *c, int pool[], sa_family_t af)
*/
static void tcp_sock_refill_init(const struct ctx *c)
{
- if (c->ifi4)
- tcp_sock_refill_pool(c, init_sock_pool4, AF_INET);
- if (c->ifi6)
- tcp_sock_refill_pool(c, init_sock_pool6, AF_INET6);
+ if (c->ifi4) {
+ int rc = tcp_sock_refill_pool(c, init_sock_pool4, AF_INET);
+ if (rc < 0)
+ warn("TCP: Error refilling IPv4 host socket pool: %s",
+ strerror(-rc));
+ }
+ if (c->ifi6) {
+ int rc = tcp_sock_refill_pool(c, init_sock_pool6, AF_INET6);
+ if (rc < 0)
+ warn("TCP: Error refilling IPv6 host socket pool: %s",
+ strerror(-rc));
+ }
}
/**
diff --git a/tcp_conn.h b/tcp_conn.h
index 20c7cb8..92d4807 100644
--- a/tcp_conn.h
+++ b/tcp_conn.h
@@ -160,7 +160,7 @@ bool tcp_splice_flow_defer(union flow *flow);
void tcp_splice_timer(const struct ctx *c, union flow *flow);
int tcp_conn_pool_sock(int pool[]);
int tcp_conn_new_sock(const struct ctx *c, sa_family_t af);
-void tcp_sock_refill_pool(const struct ctx *c, int pool[], sa_family_t af);
+int tcp_sock_refill_pool(const struct ctx *c, int pool[], sa_family_t af);
void tcp_splice_refill(const struct ctx *c);
#endif /* TCP_CONN_H */
diff --git a/tcp_splice.c b/tcp_splice.c
index cc9745e..ee68029 100644
--- a/tcp_splice.c
+++ b/tcp_splice.c
@@ -710,10 +710,18 @@ static int tcp_sock_refill_ns(void *arg)
ns_enter(c);
- if (c->ifi4)
- tcp_sock_refill_pool(c, ns_sock_pool4, AF_INET);
- if (c->ifi6)
- tcp_sock_refill_pool(c, ns_sock_pool6, AF_INET6);
+ if (c->ifi4) {
+ int rc = tcp_sock_refill_pool(c, ns_sock_pool4, AF_INET);
+ if (rc < 0)
+ warn("TCP: Error refilling IPv4 ns socket pool: %s",
+ strerror(-rc));
+ }
+ if (c->ifi6) {
+ int rc = tcp_sock_refill_pool(c, ns_sock_pool6, AF_INET6);
+ if (rc < 0)
+ warn("TCP: Error refilling IPv6 ns socket pool: %s",
+ strerror(-rc));
+ }
return 0;
}