TUN インターフェイスを使用してワイヤレス デバイスの最大スループットをテストしようとしていますが、実際にデバイスに到達する前にパケットがドロップされる送信バッファのオーバーフローを回避したいと考えています。したがって、理想的には、TIOCOUTQ を使用して送信バッファーにクエリを実行し、オーバーフローすることなくキューに常にデータがあることを確認したいと思います。以下に示す簡単なテストを作成しました。
int i, sr, buff_stat;
for(i=0; i<1000; i++){
sr = sendto(sock, message, sizeof(message), 0, &addr, sizeof(addr));
ioctl(sock, TIOCOUTQ, &buff_stat);
printf("buffer status: %i\n", buff_stat);
}
標準のイーサネット デバイスを介してルーティングされるように sock が作成された場合、出力はゼロ以外になりますが、TUN インターフェイスを介してルーティングされるように作成された場合、出力はすべてゼロになります。この場合、データを消費するプロセスがなかったため、バッファがいっぱいになると思います。データを消費するプロセスがある実際のアプリケーションでも同じ動作が得られます。
したがって、TIOCOUTQ は単に TUN インターフェイスでは機能しないという結論が正しいかどうか、および送信バッファーの状態を判断する他の方法があるかどうか疑問に思っています。