A system and method for establishing communications channels between and
among peers in a peer-to-peer networking environment. Pipes may be used
as communication channels for sending and receiving messages and other
data between services or applications over input and output endpoints.
Pipes may be asynchronous, unidirectional, stateless and unreliable.
Bidirectional pipes may also be supported. Pipes may have ends that may
be moved around and bound to different peers at different times.
Point-to-point and propagate pipes may be supported. Pipes may connect
peers that have a direct physical link and peers that do not have a
direct link. Peers may communicate through pipes without knowing on which
peer a pipe endpoint is bound. A message is sent to all peer endpoints
currently connected (listening) to the pipe. The set of connected
endpoints may be obtained from a pipe service using a pipe binding
protocol.