LinuxでTCPソケットからデータを取得するインターフェイスを作成しています。ユーザは、受信したデータが格納されるバッファを提供する。提供されたバッファが小さい場合、私はエラーを返すだけです。 最初の問題は、バッファーが小さいかどうかを判断することです。 recv()関数はバッファに実際に書き込まれたバイト数を返します。 recv()のマンページに記載されているMSG_TRUNCフラグを使用すると、それでも私には同じものが返されます。 2番目の問題は、まだソケットに入れられているデータを破棄することです。私の提供するバッファが小さくて済むと判断したら、ソケットに残っているものをすべて消去したいだけです。閉じてソケットをもう一度開くか、何も残らないうちに受信する以外の方法はありますか? よろしくソケットにデータが残っているかどうかを確認して破棄します。
トビー
[tcp(7)のマニュアルページ](http://man7.org/linux/man-pages/man7/tcp.7.html)によると: "* 2.4以降、Linuxでは' 'recv(2)'(および 'recvmsg(2)')の 'flags'引数に' MSG_TRUNC'を指定すると、受信したデータのバイトが、呼び出し元のバッファに返されるのではなく、破棄されます。 2.4.4、 'MSG_TRUNC'は' MSG_OOB'と一緒に使用して帯域外データを受信するときにもこの効果を発揮します* –