1

最初にデータに対して実際に recvfrom を実行せずに、着信パケットから sockaddr 情報を取得できる方法はありますか? 送信されたデータを実際に読み取る前に、これからより多くの情報を引き出すことができるかどうか疑問に思っていました。これを尋ねるのは、個々の IP/ポートの組み合わせごとに独自の小さな内部バッファーがあり、チャンクされたメッセージを入れるシステムがあり、それを正しい内部バッファーに入れることができるように知る必要があるためです。

4

1 に答える 1

1

はい、呼び出しに MSG_PEEK フラグを指定しrecvfromます。

recvfrom(socket, buffer, 1, MSG_PEEK, &address, &address_len);

これにより、データグラムはそのまま残り、削除されません。もちろん、バッファ サイズに小さい値を指定して、不要な読み取りオーバーヘッドを削減することもできます。次に通常recvfromの操作を行うと、データグラムは通常どおり削除されます。

recvfrom(socket, buffer, length, 0, &address, &address_len); // Do the actual read
于 2013-04-18T22:37:42.070 に答える