question about fopen fd limit
Hongjiang Zhang
honzhan at microsoft.com
Fri Dec 23 05:52:01 UTC 2016
Why do you need to map TCP fd to FILE?
It is difficult to modify FILE structure. If it is possible, let us figure out some new designs to meet your requirement.
-----Original Message-----
From: owner-freebsd-net at freebsd.org [mailto:owner-freebsd-net at freebsd.org] On Behalf Of ???
Sent: Thursday, December 22, 2016 11:57 PM
To: freebsd-net <freebsd-net at freebsd.org>
Subject: question about fopen fd limit
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
winson sheng
_______________________________________________
freebsd-net at freebsd.org mailing list
https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freebsd.org%2Fmailman%2Flistinfo%2Ffreebsd-net&data=02%7C01%7Chonzhan%40microsoft.com%7C4a9dfccbccd446be2f4a08d42a833fb0%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636180190584478890&sdata=PAwJP5IXHy0WJwxbV7MB%2B8zvKheZUYjhHx3ohFRSPZM%3D&reserved=0
To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
More information about the freebsd-net
mailing list