对于服务器端编程,我使用监听函数:
int listen(int sockfd, int backlog);
我知道积压工作应该小于或等于我将运行服务器程序的主机系统上设置的 somaxconn。 如果我使用 SOMAXCONN 作为 backlog,则相当于将其硬编码为 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 程序员也可能有一些有用的见解可以分享!
提前感谢所有黑客同行。
最佳答案
根据您的平台,您可能正在寻找 sysctl() 和 kern.ipc.somaxconn。
但是,如果我正确理解您的问题,您的目标是始终使用最大可能的待办事项大小。据我了解,传递给listen()的积压值将默默地限制在系统配置的限制内。因此,您的解决方案可能只是简单地调用带有“非常大”积压值的listen()。
关于c++ - 以编程方式评估 somaxconn 的值,以设置监听积压参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198564/