linux read():读取20个字节后再次读取"资源暂时不可用"

时间:2015-10-19 04:23:34

标签: linux sockets network-programming recv

我使用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>

1 个答案:

答案 0 :(得分:0)

你真的在读数据包,而不是字节。因此,除非有两个数据包,否则两次读取都不会成功。