对于服务器端编程,我使用监听函数:
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 程序员也可能有一些有用的见解可以分享!
预先感谢所有黑客伙伴。
根据您的平台,您可能正在寻找带有 kern.ipc.somaxconn 的 sysctl() 。
但是,如果我正确理解您的问题,您的目标是始终使用最大可能的待办事项大小。据我了解,传递给listen()的积压值将默默地限制在系统配置的限制内。因此,您的解决方案可能只是简单地调用带有“非常大”积压值的listen()。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)