SslStream эквивалент TcpClient.Available?

Основываясь на совете @ Len-Holgate в этом вопросе , я асинхронно запрашиваю 0-байтовые чтения, а в обратном вызове принимаю байты доступных байтов с синхронным читает, поскольку я знаю, что данные доступны и не буду блокироваться. Это кажется таким эффективным и замечательным.

Но затем я добавляю параметр для SslStream, и подход разваливается. Нулевое чтение нормально, но SslStream расшифровывает байты, оставляя нулевой счетчик байтов в буфере TcpClient (соответственно), и я не могу определить, сколько байтов теперь доступно для чтения в SslStream.

Is есть ли здесь простой трюк?


Какой-то код, только для контекста:

sslStream.BeginRead(this.zeroByteBuffer, 0, 0, DataAvailable, this);

И после EndRead () (который правильно возвращает 0) DataAvailable содержит:

// by now this is 0, because sslStream has already consumed the bytes
available = myTcpClient.Available; 

if (0 < available) // Never occurs
{
    // this part can be distractingly complicated, but 
    // it's based on the available byte count
    sslStream.Read(...); 
}

И из-за протокола мне нужно оценить byte -побайтное и декодирование юникода переменной ширины байта и прочее. Я не хочу, чтобы мне приходилось читать побайтово асинхронно!

9
задан Community 23 May 2017 в 01:58
поделиться