0

如何实现以下场景?

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

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

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

任何指针表示赞赏。

ps 这不是作业。而且我不是在寻找确切的代码。我只是在寻找想法

4

4 回答 4

3

它会自动执行此操作。你根本不需要做任何事情,更不用说摆弄内核参数了。

大多数关于 UDP 的帖子都在寻找阻止UDP 丢弃数据包的方法!

于 2012-08-28T05:21:42.770 回答
2

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

于 2012-10-02T20:18:32.867 回答
0

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

于 2012-08-28T08:01:27.410 回答
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

你可以随心所欲地调整这个,但这是一个想法。当你开始处理一个包裹时,你计数,当这个过程完成时,你递减。所以你基本上可以选择你现在处理多少包。

于 2012-08-28T13:31:30.510 回答