导致出现很多相同端口的UDP套接字的原因有两点:
1)在reload的时候,调用shutdown()而不是close()来关闭UDP套接字。shutdown()是用来关闭连接
的
,但是文件描述符还是会存在。UDP协议并没有提供shutdown接口(参见
udp_prot),所以调用shutdown()并没有真的关闭套
接字,而且reload的次数
太多
。
2)设置了SO_REUSEADDR选项。如果没有设置这个选项,在bind的时候就会报错,漏关或者使用shutdown()关闭的错误就很容易发现。UDP套接字没有TIME_WAIT状态,而且要使用的UDP套接字数量不多,所以没有必要设置该选项。
UDP套接字与软中断CPU利用率问题解析

本文分析了相同端口UDP套接字过多导致软中断占用CPU利用率高的原因,指出在reload过程中使用shutdown()而非close(),以及设置SO_REUSEADDR选项可能导致的问题。长链表的UDP套接字在接收包时需遍历所有套接字,增加处理时间,影响软中断性能。解决方案包括正确关闭套接字和避免不必要的SO_REUSEADDR设置。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



