а почему фтп делает FIN до аск от ПЛК?Да ещё и с данными.
Shutdown в сокете делаете?

Учтите, что окно сокета равно нулю, т.е. послал - принял - послал следующий.

И как Вы понимаете, что в буфере нет или часть пакета? Они recv могут выдаваться по частям. и не мгновенно.