If you have an open pipe to yourself (either via the IPC version of
open or by way of an explicit
pipe or
socketpair before your
fork), you might try using
Storable to serialize the object you're returning, and let the parent pick it up and use it. I use a form of RPC via authenticated HTTP (internal) using something like this and it works beautifully.
An alternative is to use select with non-blocking sockets to process them simultaneously, instead of forking and having one thread acting on one socket in a blocking fashion. Event loops like this might be easier to write in POE than constructing a complete select loop yourself.