まあ、Embarcaderoでさえ、ソケット バッファーで読み取る準備ができているバイトの正確な結果を返すことは保証されていないと述べていますが、それを見ると、Socket.ReceiveBuf に -1 を配置すると (これは ReceiveLength がラップするものです)、呼び出します。ioctlsocketとFIONREAD を使用して、ソケット s から読み取ることができるネットワークの入力バッファーで保留中のデータの量を決定します。
では、なぜ安全でも悪くもないのでしょうか?
例えば:ioctlsocket(Socket.SocketHandle, FIONREAD, Longint(i));