Hi Xperts. Some days ago I posted a phenomen about "too many keepalive retransmissions, declaring session dead" problems when using X via xdmcp. I investigated some time to solve the problem. That's what what I got:
Using ethereal to view what happens, I saw that i.e. at 4 April, 08:00:47 the client is sending many keepalive packets in a very short distance of time, before claiming that the session is dead. Looking at the sources (xdmcp.c), I found that closing sessions happens every 48-49 days, depending on the size of the variable "keepaliveDormancy". Using CARD32 as variable type for "timeOutTime" while depending on the system time (see GetTimeInMillis()) will overflow each 2^32 ms (about 49 days). The function "XdmcpWakeupHandler" in xdmcp.c is not working in a correct way when the overflow happens. As a workaround I added an if clause to wait for GetTimeInMillis to overflow, too. --- xdmcp.c Tue May 1 09:53:47 2001 +++ /root/xdmcp.c.new Sun Apr 7 15:17:57 2002 @@ -723,6 +723,7 @@ { fd_set* LastSelectMask = (fd_set*)pReadmask; fd_set devicesReadable; + CARD32 savedTimeOutTime; if (state == XDM_OFF) return; @@ -744,8 +745,11 @@ if (XFD_ANYSET(&AllClients) && state == XDM_RUN_SESSION) timeOutTime = GetTimeInMillis() + keepaliveDormancy * 1000; } - else if (timeOutTime && GetTimeInMillis() >= timeOutTime) - { + else if (timeOutTime && (savedTimeOutTime= GetTimeInMillis()) >= timeOutTime) + { + if ((savedTimeOutTime - timeOutTime) > XDM_MAX_DORMANCY) + return; + if (state == XDM_RUN_SESSION) { state = XDM_KEEPALIVE; The problem seems to be away for now. If there's a clean solution, please let me know. Thanks, -Cajus _______________________________________________ Xpert mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/xpert