0

我知道要在阅读之前找出 udp 数据包的大小,可以向内核发出这个系统调用:

ioctl(s,FIONREAD,&num_bytes);

但是,我可以通过以下系统调用之一找到相同的结果吗?

poll()
select()
epoll()

关键是在读取数据报之前知道它的大小,为缓冲区分配空间。这仅适用于 linux,在 C 中。

4

1 回答 1

0

多路复用系统调用喜欢pollselect期望观察一组条件(如输入在 fd #5 上可用,输出在 fd #7 上可用)并告诉您哪些文件描述符是可读的(哪些是可写的,等等)。一旦知道可以读取哪个文件描述符,就可以ioctl(fd, FIONREAD, &numbytes)在该可读文件描述符上使用您的fd。所以你应该同时使用poll,然后FIONREAD ......

于 2012-04-09T16:33:15.360 回答