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:

  • The c_root socket can be used in WSAJoinLeaf to join a new a leaf.
  • Placing a c_root socket into listening mode (by calling listen) does not preclude the c_root socket from being used in a call to WSAJoinLeaf to add a new leaf, or for sending and receiving multipoint data.
  • The closing of a c_root socket causes all of the associated c_leaf sockets to get FD_CLOSE notification.

There are 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 WSAJoinLeaf, and the use of c_leaf socket in listen 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:

  • The data sent on the d_root socket is delivered to all the leaves in the same multipoint session.
  • 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 nonrooted data plane, the data sent on the d_leaf socket goes 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 nonrooted data plane is contained in the corresponding WSAPROTOCOL_INFO structure for the socket.