Currently if we get an error opening a new socket while refilling a socket pool, we carry on to the next slot and try again. This isn't very useful, since by far the most likely cause of an error is some sort of resource exhaustion. Trying again will probably just hit the same error, and maybe even make things worse. So, instead stop on the first error while refilling the pool, making do with however many sockets we managed to open before the error. Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au> --- tcp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tcp.c b/tcp.c index 9eec9f3a..d49210bc 100644 --- a/tcp.c +++ b/tcp.c @@ -3016,7 +3016,8 @@ void tcp_sock_refill_pool(const struct ctx *c, int pool[], sa_family_t af) if (pool[i] >= 0) continue; - pool[i] = tcp_conn_new_sock(c, af); + if ((pool[i] = tcp_conn_new_sock(c, af)) < 0) + break; } } -- 2.43.2