これは「一種の」答えです。recv(char* buffer, size_t nytes, int flags)
ここで、フラグは次のようにORされます。
MSG_PEEK
This flag causes the receive operation to return data from the beginning of the receive queue without removing that data from the queue. Thus, a subsequent receive call will return the same data.
バッファを不可逆的に読み取ることなく、バッファに任意のバイト数が存在するかどうかを確認できるようにします。これを行うのに最も効率的な方法ではないため、これは半分の答えです。MSG_PEEKは通常、メッセージに次のような既知の長さのヘッダーがある場合に使用されます。
000123DT001
ここ00123
で、はヘッダーを含むメッセージ全体の長さ、はDT
メッセージのタイプ、001
は送信者による再試行回数です。アイデアは、メッセージを完全に読み取るバイト数を示すものをフェッチできるということです。あなたはメッセージに興味がありません。しかし、それが背後にある理由ですMSG_PEEK