Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Dec 2016 02:02:35 +1100 (EST)
From:      Ian Smith <smithi@nimnet.asn.au>
To:        hhsheng@corp.netease.com
Cc:        freebsd-questions@freebsd.org
Subject:   Re: question about fopen fd limit
Message-ID:  <20161223015110.X26979@sola.nimnet.asn.au>
In-Reply-To: <mailman.109.1482408002.12273.freebsd-questions@freebsd.org>
References:  <mailman.109.1482408002.12273.freebsd-questions@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
In freebsd-questions Digest, Vol 655, Issue 4, Message: 10
On Thu, 22 Dec 2016 11:53:08 +0800 ??? <hhsheng@corp.netease.com> wrote:
 > hi all,
 > 
 >    hi~
 >    we are from Chinese Game Develop Corp, Netease.
 >    and One of our product using FreeBsd as its OS platform.
 >    This Game has Millions of players online , and Each Server may 
 > holds 25000+ tcp connection at the same time.Thanks to BSD and kqueue 
 > :)
 > 
 >    for example, it's one of our server , netstat cmd to list 
 > connections overall...
 >    netstat -an | grep 13396 (it's our listening port) | wc -l
 >    23221
 > 
 >     recently we do some performance optimize and promote this connect 
 > limit to 28000+ or 30000+.
 >   But we find Freebsd has a limit that this huge online number will 
 > take 28000+ fd, and bsd FILE * struct's fd only support to SHORT . 
 > such as ..
 > 
 > struct __sFILE {
 >  ...
 >  short _file; /* (*) fileno, if Unix descriptor, else -1 */
 >  ...
 > 
 >   so if our server want to fopen some file when we still hold this 
 > online number, the fd amount may easily exceed 32767, and fopen 
 > definitely return a err code. then the server will appear some fataly 
 > ERROR.
 > 
 >   we do a simple test and confirm this situation.
 > 
 >   then in fopen's code , we notice that we can use open to return a 
 > fd instread of fopen to avoid this overflow, as below
 > 
 > 68 /* 
 > 1 * File descriptors are a full int, but _file is only a short. 
 > 2 * If we get a valid file descriptor that is greater than 
 > 3 * SHRT_MAX, then the fd will get sign-extended into an 
 > 4 * invalid file descriptor. Handle this case by failing the 
 > 5 * open. 
 > 6 */
 > 
 > 
 >   BUT ... so many c lib FILE series function needs a FILE * pointer 
 > as input argument, we can't convert all of them to fd, or it will be 
 > a rather suffering things to us.
 > 
 >   and even in BSD 10 , it seems this short limit still there , but 
 > other OS as debian , FILE strucnt's fileno is a int .
 >   
 >   we found an unoffical patch easily change this fileno to unsigned , 
 > but we are a very stready project, we can't afford the risk to use an 
 > unoffical patch.
 > 
 >   so, do you have any plan to change this fopen fd limit to UNSIGNED 
 > SHORT or int in the future ? ushort is enough for us .
 >   if you do , we are really glad and excited~~~~~~~if you don't ,it 
 > donen't matter, plz give us a reply so that we may need to
 >   find some other plan to resolved this suffering thing.
 >   LoL, thank you !!!!!
 > 
 > yours sincerely
 >                                        winson sheng

If you do not get a useful response here, I recommend reposting this to 
freebsd-net@freebsd.org where it will much more likely catch the eye of 
people who work with network code.

cheers, Ian



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20161223015110.X26979>