2012-08-28 33 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)插座選項來更改插座的尺寸緩衝區