2012-08-28 38 views
0

如何实现以下场景?执行:udp接收队列丢包

我想我的FreeBSD内核在高负载下丢弃UDP数据包。

我可以将sysctl net.inet.udp.recvspace设置为很小的数字来丢弃数据包。但是,我如何实现这样的应用程序?

我假设我需要某种客户端/服务器应用程序。

任何指针表示赞赏。

p.s.这是不是作业。而我不是寻找确切的代码。我只想找想法

回答

3

它会自动做到这一点。你根本不需要做任何事情,更不用说弄弄内核参数了。

大多数发布UDP的人都在寻找方法stop UDP丢弃数据包!

+0

哈哈!我知道。我想看到它失败,然后用net.inet.udp.recvspace修复。 – hari

+0

@hari所以在短时间内发送大量数据报... – EJP

0

无论是调整发送应用程序以'删除'ocasional数据包,或者,如果不可能,通过执行相同的事情的代理连接UDP消息。

0

我会做的是做到以下几点。我不知道你是否需要一个内核模块或程序。

当你收到一个UDP数据报时,你有一个函数调用,然后你可以选择做什么,放下它或者处理它。过程函数可以触发多个线程。

EVER: 
    DATAGRAM := DEQUE() 
    IF(HIGHLOAD > LIMIT) 
     SEND(HIGH_LOAD_TO(DATAGRAM.SOURCE)) 
     CONTINUE //Start from the biggining 
    HIGLOAD := HIGHLOAD + 1 
    PROCESS(DATAGRAM) 


PROCESS(DATAGRAM): 
    ...PROCESS DATAGRAM... 
    HIGHLOAD := HIGHLOAD - 1 

你可以唠叨这个,你怎么想,但是一个想法。当你开始处理一个pakcage时,你会计数,当这个过程完成时,你减少。所以你基本上可以选择你现在处理多少包。

2

使用通过setsockopt()(SOL_SOCKET, SO_RCVBUF)插座选项来更改插座的尺寸缓冲区