If fork () and then accept () in your children, only one child process will call accept () to connect, and then process it. This is pre-forking, and compounds will not be distributed to children.
You can make a standard one child for each connection scheme by changing the order, accept and unlock. However, both of these methods are for efficiency, balancing, etc., and not for sharing a particular compound.
TCP is different from UDP. It would be impractical to do this in TCP, since you will almost certainly end the mess. This received message can be distributed in one or several packets, and it would be a pain to coordinate several processes than if one child were processing the connection.