【问题标题】:Where's the const SOMAXCONN defined in c?c 中定义的 const SOMAXCONN 在哪里?
【发布时间】:2011-05-19 12:45:49
【问题描述】:

我以为它是在编译时从/proc/sys/net/core/somaxconn 检索到的,但是在我将其修改为1024echo 1024 > /proc/sys/net/core/somaxconnSOMAXCONN 在我的程序中仍然是128

    printf("---------------set socket to listen,maxconn is %d--------------\r\n\r\n", SOMAXCONN);
    // set socket to listen
    if (listen(sock_listen, SOMAXCONN) != 0)...

我检查了sys/socket.h,但它不存在...

我可以在哪里/如何更改它的值?

【问题讨论】:

  • 它应该在tcp.h。见:stackoverflow.com/questions/1198564/…
  • @Evan Mulawski ,刚刚检查过,不存在...
  • /etc/sysctl.conf 怎么样?它应该在kern.ipc.somaxconn 下。您可以使用linux.die.net/man/8/sysctl 以编程方式更改该值。
  • @Evan Mulawski ,我决定在我的程序中硬编码数字 listen(sock_listen, 1024).sysctl 是一个 bash 命令,我如何在我的程序中使用它?

标签: c network-programming


【解决方案1】:

在我的系统上,它是在bits/socket.h中定义的

/* Maximum queue length specifiable by listen.  */
#define SOMAXCONN   128

根据this,你不需要使用SOMAXCONN。只需指定您想要的数字,它将被限制为实际最大值。

【讨论】:

【解决方案2】:

在Linux下好像是这里:

$ find /usr/include -name \*.h -exec grep SOMAXCONN {} /dev/null \;
/usr/include/bits/socket.h:#define SOMAXCONN    128

在 Mac OS X 和 BSD 下它似乎在这里:

$ find /usr/include -name \*.h -exec grep SOMAXCONN {} /dev/null \;
/usr/include/sys/socket.h:#define   SOMAXCONN   128

即在这两种情况下都是socket.h,但它们似乎生活在不同操作系统的不同位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多