【发布时间】:2010-11-14 23:24:44
【问题描述】:
对于服务器端编程,我使用监听函数:
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 的文件路径可能会有所不同,具体取决于发行版。
是否有允许在 c/c++ 中评估 somaxconn 的 API 或示例代码?
如果我遗漏了一些关键点,导致思维有缺陷,请告诉我。
我也想将我的应用程序移植到 Windows,因此 Windows 程序员可能也有一些有用的见解要分享!
在此先感谢所有黑客。
【问题讨论】:
-
在windows上,这里msdn.microsoft.com/en-us/library/windows/desktop/ms739168.aspx记录为“如果设置为SOMAXCONN,负责socket的底层服务提供商会将积压设置为最大合理值。没有标准规定来获取实际积压值”。所以使用这个特殊值并忘记它。在 windows SDK 中,winsock2.h 将 SOMAXCONN 定义为 0x7fffffff,这确实是一个特殊的值。不要传递其他任何东西
标签: c++ sockets tcp tcplistener