Я не думаю, что это возможно. Каналы представляют потоковый протокол, а не пакетный. Итак, если вы записываете в канал дважды, один раз, скажем, с 250 байтами и один раз, скажем, с 520 байтами, невозможно определить, сколько байтов вы получите с другого конца в одном запросе чтения. Вы можете получить 256, 256, а затем остальные.
Если вам нужно наложить пакеты на канал, вам нужно сделать это самостоятельно, записав заранее определенное (или разделенное) число байтов в качестве длины пакета, а затем оставшуюся часть пакета. Используйте select () , чтобы узнать, есть ли данные для чтения, используйте read (), чтобы получить буфер разумного размера. Когда у вас есть буфер, вы несете ответственность за определение границы пакета.