以编程方式评估somaxconn的值,以设置listen backlog参数

时间:2009-07-29 07:30:12

标签: c++ sockets tcp tcplistener

对于服务器端编程,我使用listen函数:

int listen(int sockfd, int backlog); 

我知道积压应该小于或等于我将运行我的服务器程序的主机系统上设置的somaxconn。 如果我使用SOMAXCONN作为积压,它将等同于将其硬编码为SOMAXCONN的值,该值通常在tcp.h中定义为128.

但是,somaxconn是一个可调的sysctl参数,可以通过更改/ proc / sys / net / core / somaxconn的值或使用sysctl修改net.core.somaxconn来修改

人们通常会修改somaxconn以获得更好的系统性能。 我想通过在程序启动时评估系统的somaxconn来利用我的程序。

我可以打开文件/ proc / sys / net / core / somaxconn并读取包含的值,但这似乎是一种不太优雅的做法,特别是因为我认为somaxconn的文件路径可能会有所不同,具体取决于发行。

是否有API或示例代码,允许在c / c ++中评估somaxconn?

还告诉我,如果我错过了一些关键点,导致思维错误。

我也希望将我的应用程序移植到Windows,因此Windows程序员也可以分享一些有用的见解!

提前感谢所有黑客。

1 个答案:

答案 0 :(得分:4)

根据您的平台,您可能正在寻找具有kern.ipc.somaxconn的sysctl()。

但是,如果我正确理解您的问题,您的目标是始终使用最大可能的积压大小。据我所知,传递给listen()的backlog值将默认限制为系统配置的限制。因此,您的解决方案可能只是使用“非常大”的积压值调用listen()。