KeepAlive is working. FtpWebRequest caches connections inside, so they can be reused after some time. For details and explanation of this mechanism you can look to ServicePoint.
Another good source of information is to look into FtpWebRequest source (you can do it on VS2008).