Двустороннее TCP-мультиплексирование
Я построил простой протокол мультиплексирования поверх существующей библиотеки TCP. Это позволяет мне иметь несколько "каналов" в одном TCP-соединении. Это прекрасно работает, когда все данные отправляются в одном направлении. Например, я могу отправить файл по одному каналу и отправить сообщение по другому каналу. Когда все данные отправляются в одном направлении, все отлично работает:
TCP соединение:
Канал 1 --- Загрузка файла ---> Канал 1
Канал 2 --- Сообщение ------> Канал 2
Проблема возникает, когда я пытаюсь загрузить в одном направлении и отправить сообщение в другом направлении:
Канал 1 --- Загрузка файла -> Канал 1
Канал 2 <---- Сообщение ---- Канал 2
Файл передается нормально, но сообщение (обычно) не передается, пока файл не завершит передачу. Это известная проблема с потоками TCP?
В частности, я использую библиотеку google libjingle для установки одного TCP-соединения (на самом деле это реализация псевдо-TCP через UDP). Я уверен, что данные сообщения на самом деле отправляются через поток, но, с другой стороны, событие SE_READ не запускается до тех пор, пока файл не завершит загрузку на канале 1.
Я, конечно, не эксперт по TCP и буду признателен за любую помощь. Благодарю.