make cluster_sockfd non-blocking
[l2tpns.git] / cluster.c
index 28b878e..e921aed 100644 (file)
--- a/cluster.c
+++ b/cluster.c
@@ -1,6 +1,6 @@
 // L2TPNS Clustering Stuff
 
-char const *cvs_id_cluster = "$Id: cluster.c,v 1.20 2004/12/03 06:40:02 bodea Exp $";
+char const *cvs_id_cluster = "$Id: cluster.c,v 1.22 2004/12/13 05:09:55 bodea Exp $";
 
 #include <stdio.h>
 #include <sys/file.h>
@@ -81,7 +81,7 @@ int cluster_init()
        struct sockaddr_in interface_addr;
        struct ip_mreq mreq;
        struct ifreq   ifr;
-       int opt = 0;
+       int opt;
 
        config->cluster_undefined_sessions = MAXSESSION-1;
        config->cluster_undefined_tunnels = MAXTUNNEL-1;
@@ -99,6 +99,9 @@ int cluster_init()
        addr.sin_addr.s_addr = INADDR_ANY;
        setsockopt(cluster_sockfd, SOL_SOCKET, SO_REUSEADDR, &addr, sizeof(addr));
 
+       opt = fcntl(cluster_sockfd, F_GETFL, 0);
+       fcntl(cluster_sockfd, F_SETFL, opt | O_NONBLOCK);
+
        if (bind(cluster_sockfd, (void *) &addr, sizeof(addr)) < 0)
        {
                LOG(0, 0, 0, "Failed to bind cluster socket: %s\n", strerror(errno));
@@ -129,7 +132,7 @@ int cluster_init()
                return -1;
        }
 
-       if (setsockopt (cluster_sockfd, IPPROTO_IP, IP_MULTICAST_IF, &interface_addr, sizeof(interface_addr)) < 0)
+       if (setsockopt(cluster_sockfd, IPPROTO_IP, IP_MULTICAST_IF, &interface_addr, sizeof(interface_addr)) < 0)
        {
                LOG(0, 0, 0, "Failed to setsockopt (set mcast interface): %s\n", strerror(errno));
                return -1;
@@ -896,7 +899,7 @@ static int cluster_catchup_slave(int seq, u32 slave)
                diff += HB_MAX_SEQ;
 
        if (diff >= HB_HISTORY_SIZE) {  // Ouch. We don't have the packet to send it!
-               LOG(0, 0, 0, "A slaved asked for message %d when our seq number is %d. Killing it.\n",
+               LOG(0, 0, 0, "A slave asked for message %d when our seq number is %d. Killing it.\n",
                        seq, config->cluster_seq_number);
                return peer_send_message(slave, C_KILL, seq, NULL, 0);// Kill the slave. Nothing else to do.
        }