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

Receiving IP Multicast Datagrams

Page 118 highlights

Advanced Topics for Internet Datagram Sockets Sending and Receiving IP Multicast Datagrams #include unsigned char ttl = 64; setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)); Note that ttl is an unsigned char. Any of the values 0 through 255 can be specified. If ttl is zero, the multicast is limited to the local system. If ttl is one, the multicast is limited to a local network. If ttl is two, the multicast can forwarded through at most one gateway; and so forth. Disabling Loopback IP_MULTICAST_LOOP Normally, if a multicast datagram is sent to a port from which an application on the local system is reading, a copy of the datagram is looped back and delivered to the application. The IP_MULTICAST_LOOP socket option allows the sending application to disable loopback for datagrams sent through that socket. For example: #include unsigned char loop = 0; setsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)); Note that loop is an unsigned char. Usually, applications should not disable loopback. Disabling loopback provides only a modest improvement in system performance. Receiving IP Multicast Datagrams IP multicasting is supported only for AF_INET sockets of type SOCK_DGRAM and only on networks for which the interface supports multicasting. In order to receive multicast datagrams, an application must bind to the port number to which multicast datagrams will be sent. If an application binds to the address INADDR_ANY, it may receive all datagrams that are sent to the port number. If the application binds to a multicast group address, it may receive only datagrams sent to that group and port number. Additionally, the system must join the multicast group on the interface on which the multicast datagrams arrive. An application can request that the system join a group by using the IP_ADD_MEMBERSHIP socket option. An application can join up to IP_MAX_MEMBERSHIPS multicast groups on each socket. Currently, this is defined to be 20 in . However, each network interface may impose a smaller system-wide limit because of interface resource limitations and 118 Chapter 5

  • 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

118
Chapter 5
Advanced Topics for Internet Datagram Sockets
Sending and Receiving IP Multicast Datagrams
#include <netinet/in.h>
unsigned char ttl = 64;
setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl));
Note that
ttl
is an unsigned char. Any of the values 0 through 255 can
be specified. If
ttl
is zero, the multicast is limited to the local system. If
ttl
is one, the multicast is limited to a local network. If
ttl
is two, the
multicast can forwarded through at most one gateway; and so forth.
Disabling Loopback IP_MULTICAST_LOOP
Normally, if a multicast datagram is sent to a port from which an
application on the local system is reading, a copy of the datagram is
looped back and delivered to the application.
The IP_MULTICAST_LOOP socket option allows the sending application
to disable loopback for datagrams sent through that socket. For example:
#include <netinet/in.h>
unsigned char loop = 0;
setsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
Note that
loop
is an unsigned char. Usually, applications should not
disable loopback. Disabling loopback provides only a modest
improvement in system performance.
Receiving IP Multicast Datagrams
IP multicasting is supported only for AF_INET sockets of type
SOCK_DGRAM and only on networks for which the interface supports
multicasting.
In order to receive multicast datagrams, an application must bind to the
port number to which multicast datagrams will be sent. If an application
binds to the address INADDR_ANY, it may receive all datagrams that
are sent to the port number. If the application binds to a multicast group
address, it may receive only datagrams sent to that group and port
number.
Additionally, the system must join the multicast group on the interface
on which the multicast datagrams arrive. An application can request
that the system join a group by using the IP_ADD_MEMBERSHIP
socket option.
An application can join up to
IP_MAX_MEMBERSHIPS multicast
groups on each socket. Currently, this is defined to be 20 in
<netinet/in.h>
. However, each network interface may impose a
smaller system-wide limit because of interface resource limitations and