0

読み取る前にudpパケットのサイズを確認するには、次のsyscallをカーネルに発行できることを知っています。

ioctl(s,FIONREAD,&num_bytes);

しかし、次のシステムコールのいずれかで同じことを見つけることができますか?

poll()
select()
epoll()

重要なのは、データグラムを読み取る前にデータグラムのサイズを把握し、バッファにスペースを割り当てることです。これは、Linux専用のCです。

4

1 に答える 1

0

多重化システムコールは、監視する一連の条件(入力はfd#5で利用可能、出力はfd#7で可能)を好み、pollまたはselect期待しており、どのファイル記述子が読み取り可能(およびどのファイル記述子が書き込み可能かなど)を通知します。読み取ることができるファイル記述子がわかればioctl(fd, FIONREAD, &numbytes)、その読み取り可能なファイル記述子でを使用できますfd。したがって、両方を使用しpollてからFIONREAD ...

于 2012-04-09T16:33:15.360 に答える