Разделение одного реального соединения на несколько
От: Fedorchenko Aleksey Украина  
Дата: 09.06.03 13:12
Оценка:
Возникла потребность создать разделяемый сокет, т.е. чтобы на одном сокете можно было держать несколько сессий и по ним можно было бы гонять разные потоки данных.

Решение в лоб...
Скажем каждой новой сессии дается свой ключ и он известен как клиенту, так и серверу. Далее... По ключу при вычитке определяем для кого предназначены данные и помещаем их во внутренний буфер той сессии. Все хорошо, но...

Проблема в том, что при таком подходе прийдется создавать безразмерные буфера сессий, а этого очень как не хочется. Если же делать один буфер для всех сессий, то в случае его заполнения данными для одной из них прийдется ждать вычитки части этих данных, а пока прекратить чтение сокета. Это приведет к тому, что одна сессия может монополизировать сокет и не давать остальным получать данные.

Как быть?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.