I’ve just run into what appears to be a bug in .net’s FtpWebRequest class. I wrote some rather inefficient code that requested the same directory listing from the server several times, and found that it hung the second or third time it made the request. After some googling, I found an explanation. It seems that it caches some of the objects it creates and retrieves them from a pool, which is fine, but if it finds that the request is identical to the existing one it doesn’t reopen the response socket, so when you try to get the response stream it hangs. It’s a simple fix in my program, just save the result of the list request, but it would make it very difficult to write something that works by polling the contents of an ftp folder.