Thanks for the fix, there is one problem with the fix and some other problems.
I think that the fix needs an else: // if we get an exception while sending the request, // and the connection is a keepalive connection, it may // have been timed out by the server. Try again. if (client.keepalive) { client.closeConnection (); client.initConnection (); in = client.sendRequest (request); } else { <<<<<<<<<<<------- need to throw here if not keep alive. throw iox; } Without the else you get all sort of fun null pointers when you don't have keepalive. If keep alive is not set on the client there is another problem. At or around line 187 is this code. // client keepalive is always false if XmlRpc.keepalive is false if (!client.keepalive) client.closeConnection (); The client needs to be nulled: // client keepalive is always false if XmlRpc.keepalive is false if (!client.keepalive) { client.closeConnection (); client = null; } BUT I think that there is a larger problem that I have no suggested fix for. The client.keepalive is a necessary but not a sufficient condition. The correct condition is whether the server is honoring the keepalive. You only know the answer to this if the server tells you, that is, if the server sends a "Connection: close" in the response (or a keep-alive, but that works correctly). So if client.keepalive is true, but the server does not honor it and returns a close, then this code still needs to be executed. The close is caught much deeper in the code and so isn't known at this point. Jim -- Jim Redman (505) 662 5156 http://www.ergotech.com