On Unix, you wait for a child process by setting a handler for SIGCHLD, and calling waitpid() or wait3() or whatever in your signal handler, and noticing the pid, and
On Windows, you wait for a child process by getting a handle to it when you create it with CreateProcess, and then calling WaitFor(Single|Multiple)Object[s].
On Unix, pipes and sockets are mostly interchangeable.
On Windows, pipes and sockets are pretty much not interchangeable.