this more of conceptual confusion. making multicast server echoes datagram received.here's code
while (1) { cnt = recvfrom(sock, message, sizeof(message), 0, (struct sockaddr *) &addr, &addrlen); //printf("%d \n",cnt); if (cnt < 0) { perror("recvfrom"); exit(1); } else if (cnt == 0) { break; } printf("%s: message = \"%s\"\n", inet_ntoa(addr.sin_addr), message); addr.sin_addr.s_addr = inet_addr(example_group); cnt = sendto(sock, message, sizeof(message), 0, (struct sockaddr *) &addr, addrlen); if (cnt < 0) { perror("sendto"); exit(1); } }
the problem multicast server receive datagram. so, after recieves datagram, sends, again recieves same datagram, , on entering infinite loop. pointers on how implement such type of server?
one option ejp said, disable multicast loopback sending machine doesn't receive copy of own multicast packet back. however, aware if that, won't able test clients , server running on same machine anymore, since ip_multicast_loop implemented @ ip routing level.
a second possible option avoid infinite packet loops have echo-server send response packets different multicast group 1 listens on (or have send responses via unicast rather multicast; server call recvfrom() find out unicast source address of packet receives, it's easy know send reply packet to)
a third option modify contents of packet somehow mark already-seen, server knows not echo second time. example, specify server echo packets first byte set zero, , when server echoes packet, makes sure set packet's first byte 1 before send()-ing out. (your clients need aware of convention, of course)