The select system call is very powerful, however the (UNIX) standard specifies quite a weak subset of the features usually offered. The standard only requires sockets to be supported. The Windows/cygwin implementation limits itself to that. Modern UNIX dialects usually also support normal pipes and file handlers to be attached.

Be careful with the use of files. You should open files with the non-stdio version of open(), with option O_NONBLOCK. But even then, asynchronous support for reading and writing files and pipes may be lacking on your UNIX dialect.