如何实施以下方案?
我希望我的FreeBSD内核在高负载时丢弃UDP数据包。
我可以将sysctl
net.inet.udp.recvspace设置为非常低的数字以丢弃数据包。但是我该如何实现这样的应用呢?
我认为我需要某种客户端/服务器应用程序。
任何指针都表示赞赏。
P.S。这不是不是作业。我不正在寻找确切的代码。我只是在寻找想法。
答案 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时,你会计算,当这个过程结束时,你会减少。所以你基本上可以选择你现在处理的包数。