Да, обязательно. Блок read может дергаться несколько раз (при медленном соединении), и только в нем можно понять что все данные прочитаны.