Чтение сокета TCP и сканирование разделителя - две разные вещи.
Вы можете прочитать все доступные данные на неблокирующем сокете в байтовый массив / строку, а затем отсканировать байтовый массив для определения вашего разделителя. Сделайте все, что вам нужно, в том числе, возможно, сохраните данные после разделителя для следующей попытки чтения.
Лучше всего использовать какой-нибудь буфер для добавления входящих данных, чтобы операции с сокетами точно не диктовали обработку данных.