ノンブロッキングの tun/tap ファイル記述子から IP パケットを読み取りたいので、ノンブロッキングとしてtunfd
設定しtunfd
、libevent に READ_EV イベントを登録します。
イベントがトリガーされると、最初の 20 バイトを読み取って IP ヘッダーを取得し、次に残りを読み取ります。
nr_bytes = read(tunfd, buf, 20);
...
ip_len = .... // here I get the IP length
....
nr_bytes = read(tunfd, buf+20, ip_len-20);
しかし、read(tunfd, buf+20, ip_len-20)
EAGAIN エラーが発生した場合、実際には完全なパケットがあるはずなので、いくつかのバイトがあるはずですが、なぜこのようなエラーが発生するのでしょうか?
tunfd はノンブロッキング モードまたは libevent と互換性がありませんか?
ありがとう!