I think the problem with the forking is, when an INVITE is forked and you
actually want to setup multiple calls.
In such a case application will send INVITE without SDP body and each 200
OK will carry an offer in SDP to which application can respond via using
ACK with separate media ports for each connection. If 3-way handshake is
not supported, setting up multiple calls with one INVITE is not possible.
This is not the case. The INVITE can contain an offer, and if forked,
you get multiple answers. The caller then gets media from multiple
sources to the same port, which it can disambiguate using SSRC. If it
wants to move each dialog to a different port, it can then do a
re-invite if it wants to.