Yes, reread my first message.
When you spawn a child, give that child it's own socket and list of all open sockets for it's siblings.
Then, have the child make connections to the desired siblings socket and pass data to it.
What's happening here is that when you spawn a process, that process detaches from the parent and becomes it's own file (the .pid) even though you are still connected to the child via the parents port, your client maintians it's connection to the new child and not the parent. The child can talk to the parent, but can't recieve from it (or so I've seen... I'm still kind of new to this area as well) As far as I know, you can't just pass data from process to process without a socket connection since each process would be a user in it's own shell.
So as I said before, set up a new socket for each child and have them connect to each other to pass data back and forth.
For user one:
client -> parent.server on port 10000 -> forks child which opens port 12000
Client reconnects to port 12000 to control child process.
for user two:
another_client -> parent.server on port 10000 -> forks child which opens port 12001
Client reconnects to port 12001 to control child process.
for multiuser:
a two-way socket connection is established that is read/writable by both users for the duration of their connection.