Here are the changes to XrdClient. Many of the fixes are for abuse of casts and const. They are well worth fixing. The important errors are in XrdClientSock.cc. The test for read and write errors is not n = read(...); if (!n) { error } it is (in your case) if (n <= 0) { error } The way you had it, read was returning -1 and you were not catching it and thus making extra trips through the loops. The problem is that when there is a read failure, it is often because Disconnect has been called after the poll completed "successfully" and a read on fd = -1 is performed. Likewise for writes. In one place I put the comment "HELP". You probably need to review the change I made there and see if you want a different response to the error condition. I couldn't make sense of the protocol, but I guessed that the error was catastrophic. One big request I have is that you please please please change the name EnvGetLong to EnvGetInt. Int and long are NOT the same (read Henry Spencer's "Ten Commandments of C Programming" and obey them), and your methods definitely work with ints. Oddly enough, the corresponding put method is called EnvPutInt. The code will be far less misleading if the get method matches the put method. If there are changes that I have sent in that you can't understand, I am only too happy to explain them. The patch can be found at http://www.lepp.cornell.edu/~gregor/XrdClientPatch.tar -- Gregory J. Sharp email: [log in to unmask] Wilson Synchrotron Laboratory url: http://www.lepp.cornell.edu/ ~gregor Cornell University ph: +1 607 255 4882 Ithaca, NY 14853 fax: +1 607 255 8062