diff options
| author | Juraj Marcin <jmarcin@redhat.com> | 2025-05-21 15:52:33 +0200 |
|---|---|---|
| committer | Daniel P. Berrangé <berrange@redhat.com> | 2025-05-22 11:24:41 +0100 |
| commit | 00064705ed1f3943d3634be25da434466c87e7d5 (patch) | |
| tree | 81884f65ce3452961df543af853960337d0532b9 /util/qemu-sockets.c | |
| parent | 911e0f2c6e2d00c985affa75ec188c8edcf480f2 (diff) | |
| download | focaccia-qemu-00064705ed1f3943d3634be25da434466c87e7d5.tar.gz focaccia-qemu-00064705ed1f3943d3634be25da434466c87e7d5.zip | |
util/qemu-sockets: Add support for keep-alive flag to passive sockets
Commit aec21d3175 (qapi: Add InetSocketAddress member keep-alive) introduces the keep-alive flag, which enables the SO_KEEPALIVE socket option, but only on client-side sockets. However, this option is also useful for server-side sockets, so they can check if a client is still reachable or drop the connection otherwise. This patch enables the SO_KEEPALIVE socket option on passive server-side sockets if the keep-alive flag is enabled. This socket option is then inherited by active server-side sockets communicating with connected clients. Signed-off-by: Juraj Marcin <jmarcin@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Diffstat (limited to 'util/qemu-sockets.c')
| -rw-r--r-- | util/qemu-sockets.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index 329fdbfd97..4fbf1ed5bf 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -236,12 +236,6 @@ static int inet_listen_saddr(InetSocketAddress *saddr, int saved_errno = 0; bool socket_created = false; - if (saddr->keep_alive) { - error_setg(errp, "keep-alive option is not supported for passive " - "sockets"); - return -1; - } - memset(&ai,0, sizeof(ai)); ai.ai_flags = AI_PASSIVE; if (saddr->has_numeric && saddr->numeric) { @@ -349,6 +343,9 @@ static int inet_listen_saddr(InetSocketAddress *saddr, goto fail; } /* We have a listening socket */ + if (inet_set_sockopts(slisten, saddr, errp) < 0) { + goto fail; + } freeaddrinfo(res); return slisten; } |