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

int listen(int sockfd, int backlog);

我了解,积压量应小于或等于我将在其上运行服务器程序的主机系统上设置的somaxconn。
如果我将SOMAXCONN用作待办事项,则相当于将其硬编码为通常在tcp.h中定义为128的SOMAXCONN值。

但是,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程序员也可能会分享一些有用的见解!

在此先感谢所有其他黑客。

最佳答案

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

但是,如果我正确理解了您的问题,那么您的目标是始终使用最大可能的待办事项量。据我了解,传递给listen()的积压值将被无声限制为系统配置的限制。因此,您的解决方案可能只是用一个“很大”的积压值调用listen()。

08-18 10:30