It shouldn't be calling EndRead after the close, but it may not matter, either. Any activity with a network connection should be performed in a Try...Catch block, because exceptional circumstances will happen. You may have already figured out a solution to this, or you may have wandered off. In any case, I have found that there are some exceptions related to network issues that are worth just swallowing without making the effort to fix them. This doesn't seem to be such a case, though, since it appears to be clearly a case of code being out of order.