SPI: Semantic differences between multipoint sockets and regular sockets

In the control plane, there are some significant semantic differences between a c_root socket and a regular point-to-point socket:

  1. the c_root socket can be used in WSPJoinLeaf to join a new a leaf;
  2. placing a c_root socket into the listening mode (by callings WSPListen) does not preclude the c_root socket from being used in a call to WSPJoinLeaf to add a new leaf, or for sending and receiving multipoint data;
  3. the closing of a c_root socket will cause all the associated c_leaf sockets to get FD_CLOSE notification.

There is no semantic differences between a c_leaf socket and a regular socket in the control plane, except that the c_leaf socket can be used in WSPJoinLeaf, and the use of c_leaf socket in WSPListen indicates that only multipoint connection requests should be accepted.

In the data plane, the semantic differences between the d_root socket and a regular point-to-point socket are

  1. the data sent on the d_root socket will be delivered to all the leaves in the same multipoint session;
  2. the data received on the d_root socket may be from any of the leaves.

The d_leaf socket in the rooted data plane has no semantic difference from the regular socket, however, in the non-rooted data plane, the data sent on the d_leaf socket will go to all the other leaf nodes, and the data received could be from any other leaf nodes. As mentioned earlier, the information about whether the d_leaf socket is in a rooted or non-rooted data plane is contained in the corresponding WSAPROTOCOL_INFOW structure for the socket.