Как я понял, по собственному опыту, что в инете нет понятия конца файла или конца посылки. Я тоже возмущался, ругался, а потом смирился. Нет так-нет. Все протоколы, которые я знаю используют признак конца посылки или сообщают заранее размер блока. Принимающей стороне ничего не остается как хладнокровно вычитывать входной поток в течении установленого времени. После чего, если так и не было получено что-то вразумительное признать разрыв соединения.
Чтобы не быть голословным.
HTTP - Клиент обязательно должен заполнить поле Content-Lenght в заголовке. Сам заголовок ограничевается пустой строкой. Клиент считывает ответ сервера до закрытия сокета
FTP, POP3, SMTP - Все команды и ответы представляют из себя строки, с обязательным \n в конце строки.
FTP - передача файлов и листингов идет по дополнительному коннекту до закрытия сокета
POP3, SMTP - передача писем идет до получения одиночной точки в строке.
Глупость, нельзя на таймауты забиваться. Я вот на GPRS наблюдал пинг 120000 (две минуты), и при этом всё работало.
Ну а две минуты - это не таймаут. Я по минимуму ставлю минут пять.