int fd, yes = 1, err = 0; 
int fd, yes = 1, err = -EINVAL; 
static int mcast_open(void *data){	struct mcast_data *pri = data;	struct sockaddr_in *sin = pri->mcast_addr;	struct ip_mreq mreq;	int fd, yes = 1, err = 0;	if ((sin->sin_addr.s_addr == 0) || (sin->sin_port == 0))		goto out;	fd = socket(AF_INET, SOCK_DGRAM, 0);	if (fd < 0){		printk("mcast_open : data socket failed, errno = %d\n", 		       errno);		err = -errno;		goto out;	}	if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) {		printk("mcast_open: SO_REUSEADDR failed, errno = %d\n",			errno);		err = -errno;		goto out_close;	}	/* set ttl according to config */	if (setsockopt(fd, SOL_IP, IP_MULTICAST_TTL, &pri->ttl,		       sizeof(pri->ttl)) < 0) {		printk("mcast_open: IP_MULTICAST_TTL failed, error = %d\n",			errno);		err = -errno;		goto out_close;	}	/* set LOOP, so data does get fed back to local sockets */	if (setsockopt(fd, SOL_IP, IP_MULTICAST_LOOP, &yes, sizeof(yes)) < 0) {		printk("mcast_open: IP_MULTICAST_LOOP failed, error = %d\n",			errno);		err = -errno;		goto out_close;	}	/* bind socket to mcast address */	if (bind(fd, (struct sockaddr *) sin, sizeof(*sin)) < 0) {		printk("mcast_open : data bind failed, errno = %d\n", errno);		err = -errno;		goto out_close;	}				/* subscribe to the multicast group */	mreq.imr_multiaddr.s_addr = sin->sin_addr.s_addr;	mreq.imr_interface.s_addr = 0;	if (setsockopt(fd, SOL_IP, IP_ADD_MEMBERSHIP, 		       &mreq, sizeof(mreq)) < 0) {		printk("mcast_open: IP_ADD_MEMBERSHIP failed, error = %d\n",			errno);		printk("There appears not to be a multicast-capable network "		       "interface on the host.\n");		printk("eth0 should be configured in order to use the "		       "multicast transport.\n");		err = -errno;                goto out_close;	}	return fd; out_close:        os_close_file(fd); out:        return err;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/c50d2c4d6685db9b45cf6521046296df5bc42592/mcast_user.c/clean/arch/um/drivers/mcast_user.c