我使用funfd从tun套接字读取数据包,该套接字使用libevent注册为偶数回调函数。
首先我读取前20个字节来检查IP头,然后读取以下字节:
nr_bytes = read(tunfd, buf, 20);
assert(nr_bytes == 20);
validate_ip(buf);
/* get the IP packet length and read the whole packet */
iphdr = (struct ip *)buf;
ip_len = ntohs(iphdr->ip_len);
iphdr_len = iphdr->ip_hl*4;
nr_bytes = read(tunfd, buf+20, ip_len-20);
if(-1 == nr_bytes) perror("readtun() failed:\n");
但是对于第二次阅读read(tunfd, buf+20, ip_len-20)
,我得到了#34;资源暂时不可用&#34;,有什么潜在的问题?以及如何处理它?</ p>
答案 0 :(得分:0)
你真的在读数据包,而不是字节。因此,除非有两个数据包,否则两次读取都不会成功。