|
Semantics for joining multipoint leaves
In the following, a multipoint socket is frequently described by defining its
role in one of the two planes (control or data). It should be understood that
this same socket has a role in the other plane, but this is not mentioned in
order to keep the references short. For example when a reference is made to a
"c_root socket", this could be either a c_root/d_root or a c_root/d_leaf socket.
In rooted control plane schemes, new leaf nodes are added to a multipoint
session in one or both of two different ways. In the first method, the root uses WSAJoinLeaf to initiate a connection with a leaf node and invite it to become a
participant. On the leaf node, the peer application must have created a c_leaf socket
and used listen to set it into listen mode. The leaf node will receive an FD_ACCEPT
indication when invited to join the session, and signals its willingness to join by
calling WSAAccept. The root application will receive an FD_CONNECT indication when the join
operation has been completed.
In the second method, the roles are essentially reversed. The root application
creates a c_root socket and sets it into listen mode. A leaf node wishing to
join the session creates a c_leaf socket and uses WSAJoinLeaf to initiate the connection and request admittance. The root application
receives FD_ACCEPT when an incoming admittance request arrives, and admits the leaf
node by calling WSAAccept. The leaf node receives FD_CONNECT when it has been admitted.
In a non-rooted control plane, where all nodes are c_leaf's, the WSAJoinLeaf
is used to initiate the inclusion of a node into an existing multipoint session.
An FD_CONNECT indication is provided when the join has been completed and the
returned socket descriptor is useable in the multipoint session. In the case of
IP multicast, this would correspond to the IP_ADD_MEMBERSHIP socket option.
(Readers familiar with IP multicast's use of the connectionless UDP protocol
may be concerned by the connection-oriented semantics presented here. In
particular the notion of using WSAJoinLeaf on a UDP socket and waiting for an
FD_CONNECT indication may be troubling. There is, however, ample precedent for applying
connection-oriented semantics to connectionless protocols. It is allowed and
sometime useful, for example, to invoke the standard connect function on a UDP socket. The general result of applying connection-oriented
semantics to connectionless sockets is a restriction in how such sockets may be
used, and such is the case here as well. A UDP socket used in WSAJoinLeaf will
have certain restrictions, and waiting for an FD_CONNECT indication (which in
this case simply indicates that the corresponding IGMP message has been sent)
is one such limitation.)
There are, therefore, three instances where an application would use WSAJoinLeaf:
- Acting as a multipoint root and inviting a new leaf to join the session
- Acting as a leaf making an admittance request to a rooted multipoint session
- Acting as a leaf seeking admittance to a non-rooted multipoint session (e.g.
IP multicast)
Using WSAJoinLeaf
As mentioned previously, the function WSAJoinLeaf is used to join a leaf node into a multipoint session. WSAJoinLeaf has the same parameters and semantics as WSAConnect except that it returns a socket descriptor (as in WSAAccept), and it has an additional dwFlags parameter. The dwFlags parameter is used to indicate whether the socket will be acting only as a
sender, only as a receiver, or both. Only multipoint sockets may be used for input
parameter s in this function. If the multipoint socket is in the non-blocking mode, the
returned socket descriptor will not be useable until after a corresponding
FD_CONNECT indication has been received. A root application in a multipoint session
may call WSAJoinLeaf one or more times in order to add a number of leaf nodes,
however at most one multipoint connection request may be outstanding at a time.
The socket descriptor returned by WSAJoinLeaf is different depending on whether the input socket descriptor, s, is a c_root or a c_leaf. When used with a c_root socket, the name parameter designates a particular leaf node to be added and the returned
socket descriptor is a c_leaf socket corresponding to the newly added leaf node. It
is not intended to be used for exchange of multipoint data, but rather is used
to receive FD_XXX indications (e.g. FD_CLOSE) for the connection that exists to
the particular c_leaf. Some multipoint implementations may also allow this
socket to be used for "side chats" between the root and an individual leaf node.
An FD_CLOSE indication will be received for this socket if the corresponding
leaf node calls closesocket to drop out of the multipoint session. Symmetrically, invoking closesocket on the c_leaf socket returned from WSAJoinLeaf will cause the socket in the
corresponding leaf node to get FD_CLOSE notification.
When WSAJoinLeaf is invoked with a c_leaf socket, the name parameter contains the address of the root application (for a rooted control
scheme) or an existing multipoint session (non-rooted control scheme), and the
returned socket descriptor is the same as the input socket descriptor. In a
rooted control scheme, the root application would put its c_root socket in the
listening mode by calling listen. The standard FD_ACCEPT notification will be delivered when the leaf node
requests to join itself to the multipoint session. The root application uses the
usual accept/WSAAccept functions to admit the new leaf node. The value returned from either accept or WSAAccept is also a c_leaf socket descriptor just like those returned from WSAJoinLeaf. To accommodate multipoint schemes that allow both root-initiated and
leaf-initiated joins, it is acceptable for a c_root socket that is already in
listening mode to be used as in input to WSAJoinLeaf.
A multipoint root application is generally responsible for the orderly
dismantling of a multipoint session. Such an application may use shutdown or closesocket on a c_root socket to cause all of the associated c_leaf sockets, including
those returned from WSAJoinLeaf and their corresponding c_leaf sockets in the
remote leaf nodes, to get FD_CLOSE notification.
Programming books recommended by Amazon.com
More programming books on Amazon.com
|
Share this page
|
|
Follow us
|
| Last news from Greatis Software |
 |
|
Nostalgia .Net |
|
.Net is powerful, but not all-powerful, so sometimes we need to use Win32 API for our .Net applications. It's simple enough with Platform Invoke if you have Win32 skill, but we do not always have time to dig the ancient documentation, declare the special types that are compatible with Win32, find the values of the Win32's constants and so on. Nostalgia .Net offers several simple-to-use classes, and components that will allow you to forget about the headache of Win32 and just use the power of Win32 in your application the same way as you use the native. Net classes. More » |
| Recommended software for developers |
 |
|
Ultimate Pack |
|
Component pack for Delphi and C++ Builder that contains runtime form designer, runtime object inspector, print suite and much more for the very special price. More » |
 |
|
Form Designer .Net |
|
Unique runtime form design solution that allows to edit any form in .Net WinForms application at runtime with full source codes for only 300 euro! More » |
 |
|
Print Suite .Net |
|
Print Suite .Net is a set of components for easy printing texts, images and grids from your WinForms applications. Full C# source codes are available More » |
 |
|
Gradient Controls .Net |
|
Gradient Controls .Net offers controls with gradient background feature. Labels, panels and so on... Full C# source codes are available More » |
 |
|
Greatis iGrid |
|
iGrid plots drawing grid right over your desktop, so you can use it everywhere, with any drawing application without any special plugins for different graphic editors. More » |
All the contacts and projectsDmitry Vasiliev (just.dmitry)
Related LinksSoftware for Visual Studio .NET developers Software for Delphi and C++ Builder developers Software for Visual Basic 6 developers Delphi Tips&Tricks MegaDetailed.NET More Online Helps Win32 Programmer's Reference Win32 Multimedia Programmer's Reference OLE Programmer's Reference Microsoft Windows Pen API Programmer's Reference Microsoft Windows Sockets 2 Reference Microsoft Windows Telephony API (TAPI) Programmer's Reference Unix Manual Pages
|