読み取る前にudpパケットのサイズを確認するには、次のsyscallをカーネルに発行できることを知っています。
ioctl(s,FIONREAD,&num_bytes);
しかし、次のシステムコールのいずれかで同じことを見つけることができますか?
poll()
select()
epoll()
重要なのは、データグラムを読み取る前にデータグラムのサイズを把握し、バッファにスペースを割り当てることです。これは、Linux専用のCです。
読み取る前にudpパケットのサイズを確認するには、次のsyscallをカーネルに発行できることを知っています。
ioctl(s,FIONREAD,&num_bytes);
しかし、次のシステムコールのいずれかで同じことを見つけることができますか?
poll()
select()
epoll()
重要なのは、データグラムを読み取る前にデータグラムのサイズを把握し、バッファにスペースを割り当てることです。これは、Linux専用のCです。
多重化システムコールは、監視する一連の条件(入力はfd#5で利用可能、出力はfd#7で可能)を好み、poll
またはselect
期待しており、どのファイル記述子が読み取り可能(およびどのファイル記述子が書き込み可能かなど)を通知します。読み取ることができるファイル記述子がわかればioctl(fd, FIONREAD, &numbytes)
、その読み取り可能なファイル記述子でを使用できますfd
。したがって、両方を使用しpoll
てからFIONREAD
...