Имеется задача - работать с двунаправленным сокетом.
Т.е. я туда отправляю какие-нить пакеты и получают ответы в виде таких же пакетов. Формат пакетов простой (что-то вроде http). Роутинг пакетов оставим за кадром, это не проблема.
Проблема в, казалось бы, тривиальной штуке - как мне разбирать входящие данные?
Если я открываю сокет в синхронном режиме, то попытка чтения некого количества байт (N), вызов recv(N) может повиснуть на неопределенное время. Делать recv() даже по одному байту - не спасение, да и паразитная нагрузка.
В асинхронном режиме я поллю сокет и читаю ровно столько, сколько там накопилось. Дальше проблема выпарсивать пакет. Пакет мог прийти не полностью или могло прийти сразу несколько пакетов. До сих пор я все делал регекспами или каким-нить split, если формат пакета позволял, но подозреваю, что есть более кошерные, красивые способы. Итоговый код выглядит совершенно уродливо и меня терзают подозрения, что есть красивые, давно придуманные до меня, способы.
Помогите с ключевыми словами для поиска.