Двустороннее TCP-мультиплексирование

Я построил простой протокол мультиплексирования поверх существующей библиотеки TCP. Это позволяет мне иметь несколько "каналов" в одном TCP-соединении. Это прекрасно работает, когда все данные отправляются в одном направлении. Например, я могу отправить файл по одному каналу и отправить сообщение по другому каналу. Когда все данные отправляются в одном направлении, все отлично работает:

TCP соединение:
Канал 1 --- Загрузка файла ---> Канал 1
Канал 2 --- Сообщение ------> Канал 2

Проблема возникает, когда я пытаюсь загрузить в одном направлении и отправить сообщение в другом направлении:

Канал 1 --- Загрузка файла -> Канал 1
Канал 2 <---- Сообщение ---- Канал 2

Файл передается нормально, но сообщение (обычно) не передается, пока файл не завершит передачу. Это известная проблема с потоками TCP?

В частности, я использую библиотеку google libjingle для установки одного TCP-соединения (на самом деле это реализация псевдо-TCP через UDP). Я уверен, что данные сообщения на самом деле отправляются через поток, но, с другой стороны, событие SE_READ не запускается до тех пор, пока файл не завершит загрузку на канале 1.

Я, конечно, не эксперт по TCP и буду признателен за любую помощь. Благодарю.

0 ответов

Другие вопросы по тегам