See the gcc documentation for details of exactly what information they need. There's really not much that can be done about this, except to add -traditional to the compiler flags. Note that -traditional has effects beyond just changing the language that gcc accepts. This increases the memory footprint of the program. Preprocessor symbols conflict with prototypes in the code One of the most frequent problems is that some common functions are defined as macros in Linux's header files and the preprocessor will refuse to parse similar prototype definitions in the code.
Programs start busy-waiting.
This may be implemented in future versions of the system. At least, it has here. If no data had arrived, this will be zero, and future calls using the same timeout structure will immediately return. Some versions of Mosaic were at one time notable for this problem. Interrupted system calls.