What happens in Figure when we reset the signal handler, and the process has not established a handler for SIGALRM?
In Figure, we print a warning if the process already has an alarm timer set. Modify the function to reset this alarm for the process after the connect, before the function returns.
Modify Figure as follows: Before calling read, call recv specifying MSG_PEEK. When this returns, call ioctl with a command of FIONREAD and print the number of bytes queued on the socket's receive buffer. Then, call read to actually read the data.
What happens to the data in a standard I/O buffer that has not yet been output if the process falls off the end of the main function instead of calling exit?
Apply each of the two changes described following Figure and verify that each one corrects the buffering problem.