Alternative f => [f a] -> f a -containers +network

On Windows operating systems, the networking subsystem has to be initialised using withSocketsDo before any networking operations can be used. eg.
> main = withSocketsDo $ do {...}
Although this is only strictly necessary on Windows platforms, it is harmless on other platforms, so for portability it is good practice to use it all the time.

Throw an IOError corresponding to the current socket error if the IO action returns a result of -1, but retries in case of an interrupted operation. Checks for operations that would block and executes an alternative action before retrying in that case.