我知道要在阅读之前找出 udp 数据包的大小,可以向内核发出这个系统调用:
ioctl(s,FIONREAD,&num_bytes);
但是,我可以通过以下系统调用之一找到相同的结果吗?
poll()
select()
epoll()
关键是在读取数据报之前知道它的大小,为缓冲区分配空间。这仅适用于 linux,在 C 中。
我知道要在阅读之前找出 udp 数据包的大小,可以向内核发出这个系统调用:
ioctl(s,FIONREAD,&num_bytes);
但是,我可以通过以下系统调用之一找到相同的结果吗?
poll()
select()
epoll()
关键是在读取数据报之前知道它的大小,为缓冲区分配空间。这仅适用于 linux,在 C 中。
多路复用系统调用喜欢poll
或select
期望观察一组条件(如输入在 fd #5 上可用,输出在 fd #7 上可用)并告诉您哪些文件描述符是可读的(哪些是可写的,等等)。一旦知道可以读取哪个文件描述符,就可以ioctl(fd, FIONREAD, &numbytes)
在该可读文件描述符上使用您的fd
。所以你应该同时使用poll
,然后FIONREAD
......