实现:udp接收队列丢弃数据包

时间:2012-08-28 05:18:47

标签: c sockets network-programming udp freebsd

如何实施以下方案?

我希望我的FreeBSD内核在高负载时丢弃UDP数据包。

我可以将sysctl net.inet.udp.recvspace设置为非常低的数字以丢弃数据包。但是我该如何实现这样的应用呢?

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

任何指针都表示赞赏。

P.S。这不是不是作业。我正在寻找确切的代码。我只是在寻找想法

4 个答案:

答案 0 :(得分:3)

它会自动完成。你根本不需要做任何事情,更不用说内核参数了。

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

答案 1 :(得分:2)

通过(SOL_SOCKET, SO_RCVBUF)使用setsockopt()套接字选项更改套接字缓冲区的大小。

答案 2 :(得分:0)

调整发送应用程序以“删除”偶然数据包,或者,如果不可能,通过执行相同操作的代理连接UDP消息。

答案 3 :(得分: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时,你会计算,当这个过程结束时,你会减少。所以你基本上可以选择你现在处理的包数。