]> Pileus Git - ~andy/linux/blobdiff - net/ipv4/ip_sockglue.c
[IPV4]: multicast API "join" issues
[~andy/linux] / net / ipv4 / ip_sockglue.c
index f8b172f89811d2b6fa2d9a762e1a20d47679b36b..fc7c481d0d79378981841ff6989bcaebc0b14f23 100644 (file)
@@ -677,11 +677,11 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char __user *optval,
                                mreq.imr_address.s_addr = mreqs.imr_interface;
                                mreq.imr_ifindex = 0;
                                err = ip_mc_join_group(sk, &mreq);
-                               if (err)
+                               if (err && err != -EADDRINUSE)
                                        break;
                                omode = MCAST_INCLUDE;
                                add = 1;
-                       } else /*IP_DROP_SOURCE_MEMBERSHIP */ {
+                       } else /* IP_DROP_SOURCE_MEMBERSHIP */ {
                                omode = MCAST_INCLUDE;
                                add = 0;
                        }
@@ -754,7 +754,7 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char __user *optval,
                                mreq.imr_address.s_addr = 0;
                                mreq.imr_ifindex = greqs.gsr_interface;
                                err = ip_mc_join_group(sk, &mreq);
-                               if (err)
+                               if (err && err != -EADDRINUSE)
                                        break;
                                greqs.gsr_interface = mreq.imr_ifindex;
                                omode = MCAST_INCLUDE;