2011-05-19 67 views
0

我以爲它是在編譯時從/proc/sys/net/core/somaxconn檢索的,但是在我將其修改爲1024echo 1024 > /proc/sys/net/core/somaxconn之後,SOMAXCONN在我的程序中仍然是128c中定義的const SOMAXCONN在哪裏?

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,但它不存在...

在哪裏/我怎樣才能改變它的價值呢?

+0

它應該在'tcp.h'中。請參閱:http://stackoverflow.com/questions/1198564/programatically-evaluating-the-value-of-somaxconn-to-set-the-listen-backlog-para – 2011-05-19 13:00:09

+0

@Evan Mulawski,只是檢查,不存在... – 2011-05-19 13:02:44

+0

'/ etc/sysctl.conf'如何?它應該在'kern.ipc.somaxconn'下。您可以使用http://linux.die.net/man/8/sysctl以編程方式更改值。 – 2011-05-19 13:05:17

回答

2

在我的系統它在bits/socket.h

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

定義據this,你並不需要使用SOMAXCONN。只需指定你想要的號碼,它將被限制在實際的最大值。

+0

在我的Ubuntu 12.04上,它位於/usr/include/i386-linux-gnu/bits/socket.h。 SOMAXCONN由http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_socket.h.html定義 – 2012-06-02 02:14:21

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但他們生活在不同的位置在不同的操作系統上它似乎。