Good question - but have you ever tried to connect 500 consumers over TCP sockets ?
If you also have a high message rate (>10k msgs/sec), you will end up using UDP (one message to ALL consumers, not copies!).
But then you don't have TCP's reliability, which is where PGM or TRDP comes in.
with such a requirement, I found TIBCO RV very useful/the best I know. The C API is very quick (forget about Java if you are above 10k msgs/sec).
Of course you could roll your own reliable multicast, but the RV API is very simple to use and ported to MANY different platforms. I guess simplicity of use is the main argument against TCP. It takes a day to teach a junior programmer how to write an stable and working RV pub/sub application, it takes a month to do the same with TCP.
The rvd itself just sits there and is invisible, so why would you worry about that ?
If fanout is not an issue (1-1 or even 1-5 scenario), look into TIBCO EMS (or another JMS provider) instead or maybe AMQP.
And another real advantage over TCP are subjects (or JMS topics).
If you are integrating 20 different applications, that helps a lot.