[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] PATCH: enabling TCP keepalives on VNC connections
From: |
David S. Ahern |
Subject: |
Re: [Qemu-devel] PATCH: enabling TCP keepalives on VNC connections |
Date: |
Wed, 22 Apr 2009 15:22:13 -0600 |
User-agent: |
Thunderbird 2.0.0.21 (X11/20090320) |
Anthony Liguori wrote:
> David S. Ahern wrote:
>> Something is blocking this message from my gmail account; trying again
>> with this one.
>>
>> This patch enables TCP keepalives on VNC connections for linux hosts.
>> After 60-seconds of idle time, probes are sent every 12 seconds with the
>> connection resetting after 5 failed probes (ie., connection is closed if
>> no response received in 60-seconds).
>>
>> Signed-off-by: David Ahern <address@hidden>
>>
>>
>> david
>> diff --git a/vnc.c b/vnc.c
>> index ab1f044..7a8bbd7 100644
>> --- a/vnc.c
>> +++ b/vnc.c
>> @@ -32,6 +32,12 @@
>>
>> #define VNC_REFRESH_INTERVAL (1000 / 30)
>>
>> +#ifdef __linux__
>> +#define VNC_TCP_KEEPIDLE 60
>> +#define VNC_TCP_KEEPINTVL 12
>> +#define VNC_TCP_KEEPCNT 5
>> +#endif
>>
>
> Should probe in configure and make an appropriate CONFIG_. This is not
> necessarily a linux specific feature.
ok. I can only test on linux and mac os x; I do not have a means for
building on windows.
>
>> #include "vnc_keysym.h"
>> #include "d3des.h"
>>
>> @@ -2015,12 +2021,41 @@ static void vnc_listen_read(void *opaque)
>> VncDisplay *vs = opaque;
>> struct sockaddr_in addr;
>> socklen_t addrlen = sizeof(addr);
>> + int val;
>>
>> /* Catch-up */
>> vga_hw_update();
>>
>> int csock = accept(vs->lsock, (struct sockaddr *)&addr, &addrlen);
>> if (csock != -1) {
>> +#ifdef __linux__
>> + /* best effort to enable keep alives */
>> + val = 1;
>> + if (setsockopt(csock, SOL_SOCKET, SO_KEEPALIVE,
>> + &val, sizeof(val)) < 0) {
>> + fprintf(stderr, "VNC: failed to enable keepalives\n");
>> + }
>>
>
> If we want to enable keep alive universally, wouldn't we also want it on
> the tcp: character devices?
>
Ok. I can make a generic library call that takes the timers as input
options. If the timer is 0 means leave at OS default. What about other
accept() callers - e.g.,gdbstub?
I'll take a look at this end of next week after my vacation around this
weekend.
david