Only lightly touched on here is the horrible-ness of signals interrupting system calls. The ability to set SA_RESTART is better than nothing but it has significant problems, in particular that it's not implemented appropriately everywhere (Linux is pretty good but Solaris, for example, is pretty bad).
This means that if, for example, you set a signal handler for SIGCHLD you have major problems since SA_RESTART can't be considered reliable (portably). The trick of having an internal pipe to communicate between your signal handler and your main event loop is still subject to this problem.
One assumes that signalfd() would not interrupt system calls on signals delivered through the FD so it solves that problem--but it's Linux-specific and Linux already handles SA_RESTART reliably.