Niels Möller wrote:
Joseph Galbraith <galb-list%vandyke.com@localhost> writes:This is almost the way it works, but not quite. V_C = max { version numbers supported by the client } V_U = highest version supported by server <= V_C (V_S doesn't actually exist on the wire.)Thanks for the correction. Let's see if I understand what this implies for interoperability. The failure, for traditional version exchange, seems to be * Client supporting version 3 and 6. * Server supporting version 3 and 4. => V_U = 4 => communication failure. Is this correct?
Let me call out one additional failure-- I mention it in my other message but I think it is worth calling out seperately. It is more a failure to fail gracefully. * Client supporting versions < n * Server supporting versions >= n+1 These two can't interoperate, but the server can't communicate why. The client sees a channel close as the failure mode, which could mean many different things. Today, in fact, a channel close probably means that the server crashed. Or had some other fatal startup bug/failure. Version negotiation failure is probably a small percentage of such cases. (Today anyway-- next year may be different.) I'd like an unambigous failure when the versions are incompatible. Thanks, - Joseph