I have a system where I want to listen to a socket and wait to client connect and then pass the connection to another application that I’ll start as soon as the connection is established.
I do not have control on this other application and can only set the port where it will listen, but I want to have one process for each new client.
This is what I’m trying to do:

I’ve been searching for a solution, but I thing I don’t have the right terminology, but I managed to find on Richard Stevens’ “Unix Network Programming” something about the AF_ROUTE family of sockets that may be combined with a SOCK_RAW to route a connection to another IP and port. But there’s too little documentation about how to use this flag and seems to require superuser privileges (that I want to avoid).
Maybe there’s an easier solution but I’m probably using the wrong terms. Is it clear what I want to do?
I don’t think you’ll be able to just “pass” the socket like you want to, especially if you can’t change and recompile “APP”. Sockets include various administrative overhead (resource management, etc) that are linked to the process they are owned by. In addition, if you can’t recompile APP, there is no way to make it bypass the steps involved with accepting a connection and simple have an already open connected “handed” to it by your router.
However, have you considered simply using router as a pass-through? Basically, have your “Router” process connect via sockets to the each “APP” process it spawns, and simply echo whatever it recieves from the appropriate client to the appropriate APP, and visa versa for APP to client?
This does add overhead, and you will have to manage a small mapping to keep track of which clients go to which apps, but it might work (assuming the APP or client aren’t basing any behavior off of the IP address they are connected to, etc). Assuming you can’t recompile APP, there might not be too many other options.
The code for this is relatively simple. Your handler for data recieved from APP just looks up the socket for the appropriate app from your mapping, and then does a non blocking send of this data out on it. Likewise the handler for data recieved from client. Depending on how exactly the clients and app behave, you may have to handle a bit of synchronization (if you recieve from both simultaneously).