88kb のファイル記述子にメッセージを書き込んでいます。私の Linux システムのファイル記述子は 64kb しか保持できません。データがファイル記述子に配置されると、データが読み取られ、tcp 接続にパイプされます。
ファイル記述子にさらにデータを書き込むことができるかどうか、つまりファイル記述子が空であることをどのように確認できますか? ファイル記述子が空になるまでブロックするか、少なくともファイル記述子にデータを安全に書き込む方法を知らせる値を返すことができる関数が必要です。
88kb のファイル記述子にメッセージを書き込んでいます。私の Linux システムのファイル記述子は 64kb しか保持できません。データがファイル記述子に配置されると、データが読み取られ、tcp 接続にパイプされます。
ファイル記述子にさらにデータを書き込むことができるかどうか、つまりファイル記述子が空であることをどのように確認できますか? ファイル記述子が空になるまでブロックするか、少なくともファイル記述子にデータを安全に書き込む方法を知らせる値を返すことができる関数が必要です。
select()はおそらくあなたが望むものだと思います。適切な引数を使用すると、ファイル記述子が I/O 操作の準備ができるまでブロックするように調整できます。
ただし、通常、ファイル記述子に容量がある、または「空」であるとは言わないため、質問は少し奇妙に表現されています。パイプの 1 つのエンドポイントを表すファイル記述子について話しているように思えますが、容量が 64 KB のパイプ (ファイル記述子ではありません) です。
OPが設定された最大パケットサイズよりも大きなデータグラム(AF_UNIXまたはAF_INET / UDP)を送信しようとしているように思えます。その他の可能性としては、アトミック書き込みサイズが最大のパイプと FIFO があります。ここでの修正は、複数の書き込みを行うことです。連続した書き込みは、パイプ/FIFO に空きができるまでブロックされます。