gpt4 book ai didi

c# - 我可以依赖 DataAvailable 来获取 SSL 封装的网络流吗?

转载 作者:行者123 更新时间:2023-11-30 22:26:17 26 4
gpt4 key购买 nike

我正在处理一个执行大量异步读取的应用程序。为了提高性能,我想直接从 SslStream 同步调用 Read,前提是调用不会阻塞。

SslStream 本身并不像底层 NetworkStream 那样提供 DataAvailable 属性。

因此,鉴于我知道它是一个正在读取的包装网络流,DataAvailable 中的 true 是否保证对 SslStream 的调用> 不会造成阻塞吗?

像这样:

public void Read(NetworkStream netStream, SslStream sslStream)
{
// given that netStream is the inner stream of sslStream
if (netStream.DataAvailable)
{
// Will not block
sslStream.Read(...);
}
else
{
// Would block
sslStream.Read(...);
}
}

SslStream 已经通过身份验证并准备就绪。我不确定除了加密/解密之外是否还有任何额外的开销。我假设答案取决于 SslStream 是否需要从底层流中读取一个以上的字节才能读取一个加密字节。

最佳答案

不,它不能保证,因为在下一层有 SSL 记录,您可能还没有收到完整的记录,从密码学上讲,在您拥有所有记录之前您不能做任何事情,因为您首先必须检查 MAc 的完整性。

但更重要的是,我质疑整个策略。只需在正常代码中根据需要发出读取:不要试图猜测哪种模式在每种情况下效果最好。 SSL 开销可能会淹没同步/异步差异,而网络带宽限制会淹没它们。

关于c# - 我可以依赖 DataAvailable 来获取 SSL 封装的网络流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com