TIOCOUTQ或TUN / TAP接口的等效功能?

时间:2015-12-18 15:35:46

标签: c linux buffer tun

我尝试使用TUN接口测试无线设备的最大吞吐量,并且我希望避免溢出发送缓冲区,这会导致数据包在实际到达之前被丢弃设备。理想情况下,我想使用TIOCOUTQ查询发送缓冲区,以确保队列中始终有数据而不会溢出它。我创建了一个简单的测试,如下所示。

int i, sr, buff_stat;
for(i=0; i<1000; i++){
  sr = sendto(sock, message, sizeof(message), 0, &addr, sizeof(addr));
  ioctl(sock, TIOCOUTQ, &buff_stat);
  printf("buffer status: %i\n", buff_stat);
}

如果创建了sock,使其通过标准以太网设备进行路由,则输出非零,但如果创建sock使其通过TUN接口路由,则输出全为零。在这种情况下,没有进程消耗数据,所以我认为缓冲区只会填满。我在实际应用程序中得到了相同的行为,我确实有一个消耗数据的进程。

所以我想知道我是否正确地断定TIOCOUTQ根本无法使用TUN接口,以及是否有其他方法可以确定发送缓冲区状态。

0 个答案:

没有答案