我的问题是使用rawsocket传递高速(大于50kpps)流量,两个线程,一个是发送(从缓冲区读取),另一个是接收(写入缓冲区)。
我必须使用while(1)循环来确保一个无限循环,从那以后我就不能使用usleep了,我会松包(我已经试过了)现在cpu使用率是100%,我想我是在消耗我的cpu。。。
代码如下:

while (1)
{

  if (sendIndex == PACKET_COUNT_MAX)
{
  sendIndex = 0;
}
  else if (ringBuffer[sendIndex].drop == 0)
{if(sendtosocket (ringBuffer, sendIndex, rawout) < 0)
    a++;
    else
    sendIndex++;}
  else if (ringBuffer[sendIndex].drop == 1) {
            ringBuffer[sendIndex].header.free = 1;
            memset (ringBuffer[sendIndex].data, 0, sizeof (ringBuffer[sendIndex].data));
            sendIndex++;
           }
  else
{
  a++;
}
    //nanosleep((struct timespec[]){{0, 5}}, NULL);
}

提前谢谢!!!!!!!
丽莎

最佳答案

您需要将控制权传递给内核您可能会发现有用的命令是select查看http://manpages.courier-mta.org/htmlman2/select.2.html上的整个故事有关详细信息,http://www.gnu.org/software/libc/manual/html_node/Waiting-for-I_002fO.html
一切都是因为你知道除了等待网络的输入,你别无选择或者文件系统或者其他任何文件描述符(U*ix行话)所以,一旦有东西要处理,就让内核唤醒你。

10-08 07:35