after a search I understood the trick. FD_SIZE, FD_ZERO and so on are
macro and not function (your application won't call an external
library), so if you change __FD_SETSIZE you are changing the size of
fd_set and when you compile your application everything it's ok. Glibc
uses poll when needed so no problem. From kernel point of view there is
no problem because it uses the first paramenter of select and then the
max fds per-process, there isn't a problem to handle a bigger struct
fd_set. So at the end, in your development environment you need to
change .h and in your target environment you need to do uname -n 4096. A
problem can happen I think, if in this condition, you try to run your
application on a system with uname -n 1024.