diff -ru --new-file ucarp-1.4-vanilla/src/carp.c ucarp-1.4-yandex/src/carp.c
--- ucarp-1.4-vanilla/src/carp.c	2008-01-20 01:27:13.000000000 +0300
+++ ucarp-1.4-yandex/src/carp.c	2008-01-30 17:24:03.000000000 +0300
@@ -751,6 +751,19 @@
                 interface == NULL ? "-" : interface, strerror(errno));
         return -1;
     }
+
+    struct ip_mreqn req_add;
+    memset(&req_add, 0, sizeof (req_add));
+    req_add.imr_multiaddr.s_addr = inet_addr("224.0.0.18");
+    req_add.imr_address.s_addr = srcip.s_addr;
+    if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
+                  (char *) &req_add, sizeof (struct ip_mreqn)) < 0) {
+      logfile(LOG_ERR, "Can't do IP_ADD_MEMBERSHIP errno=%s (%d)",
+             strerror(errno), errno);
+      close(fd);
+      return -1;
+    }
+
 #ifdef SIOCGIFFLAGS    
     if (strlen(interface) >= sizeof iface.ifr_name) {
         logfile(LOG_ERR, _("Interface name too long"));
