Sockets vs. Ports in UVM's TLM

I’m trying to understand the use cases behind ports (like the ones used between monitors and scoreboards, drivers and sequencers) and sockets. Is it that ports like analysis ports don’t necessarily need a target while sockets do?

In reply to metzkorn1:

The difference between a TLM port and a TLM socket is that a port is generally used for unidirectional communication, whereas a socket formalizes bidirectional communication. I say “generally” because there are ad-hoc ways of using ports for bidirectional communication.

An “analysis port” is different from other kinds of ports in that it does not need a target. It implements a publisher/subscriber pattern where it’s OK to publish a transaction, but no one is required to read it. The other kinds of ports like a put_port or get_port as well as all sockets require an initiator to target connection.