/*
 * Copyright (c) 1993 W. Richard Stevens.  All rights reserved.
 * Permission to use or modify this software and its documentation only for
 * educational purposes and without fee is hereby granted, provided that
 * the above copyright notice appear in all copies.  The author makes no
 * representations about the suitability of this software for any purpose.
 * It is provided "as is" without express or implied warranty.
 */

#include	"sock.h"

void
join_mcast(int fd, struct sockaddr_in *sin)
{
#ifdef	IP_ADD_MEMBERSHIP	/* only include if host supports mcasting */
	u_long			inaddr;
	struct ip_mreq	mreq;

	inaddr = sin->sin_addr.s_addr;
	if (IN_MULTICAST(inaddr) == 0)
		return;			/* not a multicast address */

	mreq.imr_multiaddr.s_addr = inaddr;
	mreq.imr_interface.s_addr = htonl(INADDR_ANY);	/* need way to change */
	if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq,
												sizeof(mreq)) == -1 )
		err_sys("IP_ADD_MEMBERSHIP error");

	if (verbose)
			fprintf(stderr, "multicast group joined\n");
#endif	/* IP_ADD_MEMBERSHIP */
}


syntax highlighted by Code2HTML, v. 0.9.1