HP Rp7410 BSD Sockets Interface Programmer's Guide - Page 119

Joining a Multicast Group IP_ADD_MEMBERSHIP, Leaving a Multicast Group IP_DROP_MEMBERSHIP

Page 119 highlights

Advanced Topics for Internet Datagram Sockets Sending and Receiving IP Multicast Datagrams because the system uses some link-layer multicast addresses. For example, the E/ISA interface card is limited to 16 multicast addresses, and the system uses two of those. So all applications in the system can join at most 14 unique multicast groups on each E/ISA interface. An application automatically leaves a multicast group when it terminates, either normally or abnormally. Alternatively, the application can leave a group by using the IP_DROP_MEMBERSHIP socket option. However, the system remains a member of a multicast group as long as at least one application is a member. If more than one application binds to the same port number on a system, each application must set the SO_REUSEPORT socket option before binding to the port. In that case, every application will receive all multicast datagrams sent to the port number. Joining a Multicast Group IP_ADD_MEMBERSHIP In order to receive multicast datagrams, a system must join the multicast group. An application can request that the system join a group by using the IP_ADD_MEMBERSHIP socket option. For example: #include struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = inet_addr("224.1.2.3"); mreq.imr_interface.s_addr = INADDR_ANY; setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); Each membership is associated with only one interface, and it is possible to join the same multicast group on more than one interface. If imr_interface is INADDR_ANY, the membership is joined on the system default interface. Otherwise, imr_interface should be the IP address of a local interface. Leaving a Multicast Group IP_DROP_MEMBERSHIP An application automatically leaves a multicast group when it terminates, either normally or abnormally. Alternatively, the application can leave a group by using the IP_DROP_MEMBERSHIP socket option. For example: #include struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = net_addr("224.1.2.3"); mreq.imr_interface.s_addr = INADDR_ANY; setsockopt (s, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq)); Chapter 5 119

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196

Chapter 5
119
Advanced Topics for Internet Datagram Sockets
Sending and Receiving IP Multicast Datagrams
because the system uses some link-layer multicast addresses. For
example, the E/ISA interface card is limited to 16 multicast addresses,
and the system uses two of those. So all applications in the system can
join at most 14 unique multicast groups on each E/ISA interface.
An application automatically leaves a multicast group when it
terminates, either normally or abnormally. Alternatively, the application
can leave a group by using the IP_DROP_MEMBERSHIP socket option.
However, the system remains a member of a multicast group as long as
at least one application is a member.
If more than one application binds to the same port number on a system,
each application must set the SO_REUSEPORT socket option
before
binding to the port. In that case, every application will receive all
multicast datagrams sent to the port number.
Joining a Multicast Group IP_ADD_MEMBERSHIP
In order to receive multicast datagrams, a system must join the
multicast group. An application can request that the system join a group
by using the IP_ADD_MEMBERSHIP socket option. For example:
#include <netinet/in.h>
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr(“224.1.2.3”);
mreq.imr_interface.s_addr = INADDR_ANY;
setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
Each membership is associated with only one interface, and it is possible
to join the same multicast group on more than one interface. If
imr_interface
is INADDR_ANY, the membership is joined on the
system default interface. Otherwise,
imr_interface
should be the IP
address of a local interface.
Leaving a Multicast Group IP_DROP_MEMBERSHIP
An application automatically leaves a multicast group when it
terminates, either normally or abnormally. Alternatively, the application
can leave a group by using the IP_DROP_MEMBERSHIP socket option.
For example:
#include <netinet/in.h>
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = net_addr(“224.1.2.3”);
mreq.imr_interface.s_addr = INADDR_ANY;
setsockopt (s, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));