gpt4 book ai didi

delphi - 为什么使用 Socket.ReceiveLength 不安全?

转载 作者:行者123 更新时间:2023-12-02 13:34:36 25 4
gpt4 key购买 nike

好吧,甚至Embarcadero声明不能保证返回套接字缓冲区中准备读取的字节的准确结果,但是如果您查看它,当您将 -1 放在 Socket.ReceiveBuf (这是 ReceiveLength 包装的)时,它会调用 ioctlsocket FIONREAD 确定可以从套接字 s 读取的网络输入缓冲区中待处理的数据量

那么,它怎么会不安全或不好呢?

例如:ioctlsocket(Socket.SocketHandle, FIONREAD, Longint(i));

最佳答案

您特别提到的文档说(强调我的)

Note: ReceiveLength is not guaranteed to be accurate for streaming socket connections.

这意味着长度无法提前得知,因为它是由数据流提供的。显然,如果您不知道提前发送的数据有多大,则无法正确设置客户端应该期望的长度。

将其视为复制文件的通用代码。如果您事先不知道要复制的文件有多大,则无法预测要复制的字节数。对于套接字,提前不知道提供套接字的流大小(例如,实时生成并发送的数据),因此无法通知客户端套接字期望有多少。

关于delphi - 为什么使用 Socket.ReceiveLength 不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15536772/

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