~ubuntu-branches/ubuntu/utopic/babeld/utopic-proposed

« back to all changes in this revision

Viewing changes to babeld.c

  • Committer: Package Import Robot
  • Author(s): Stéphane Glondu
  • Date: 2013-11-22 00:12:28 UTC
  • mfrom: (1.1.12)
  • Revision ID: package-import@ubuntu.com-20131122001228-iui8suwokn99fsl1
Tags: 1.4.3-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
63
63
int default_wireless_hello_interval = -1;
64
64
int default_wired_hello_interval = -1;
65
65
int resend_delay = -1;
 
66
int random_id = 0;
66
67
int do_daemonise = 0;
67
 
char *logfile = NULL,
 
68
const char *logfile = NULL,
68
69
    *pidfile = "/var/run/babeld.pid",
69
70
    *state_file = "/var/lib/babel-state";
70
71
 
88
89
 
89
90
static volatile sig_atomic_t exiting = 0, dumping = 0, reopening = 0;
90
91
 
 
92
static int accept_local_connections(fd_set *readfds);
91
93
static int kernel_routes_callback(int changed, void *closure);
92
94
static void init_signals(void);
93
95
static void dump_tables(FILE *out);
97
99
main(int argc, char **argv)
98
100
{
99
101
    struct sockaddr_in6 sin6;
100
 
    int rc, fd, i, opt, random_id = 0;
 
102
    int rc, fd, i, opt;
101
103
    time_t expiry_time, source_expiry_time, kernel_dump_time;
102
 
    char *config_file = NULL;
 
104
    const char *config_file = NULL;
103
105
    void *vrc;
104
106
    unsigned int seed;
105
107
    struct interface *ifp;
620
622
        }
621
623
 
622
624
#ifndef NO_LOCAL_INTERFACE
623
 
        if(local_server_socket >= 0 &&
624
 
           FD_ISSET(local_server_socket, &readfds)) {
625
 
            int s;
626
 
            s = accept(local_server_socket, NULL, NULL);
627
 
            if(s < 0) {
628
 
                if(errno != EINTR && errno != EAGAIN)
629
 
                    perror("accept(local_server_socket)");
630
 
            } else if(num_local_sockets >= MAX_LOCAL_SOCKETS) {
631
 
                /* This should never happen, since we don't select for
632
 
                   the server socket in this case.  But I'm paranoid. */
633
 
                fprintf(stderr, "Internal error: too many local sockets.\n");
634
 
                close(s);
635
 
            } else {
636
 
                local_sockets[num_local_sockets++] = s;
637
 
                local_notify_all_1(s);
638
 
            }
639
 
        }
 
625
        accept_local_connections(&readfds);
640
626
 
641
627
        i = 0;
642
628
        while(i < num_local_sockets) {
838
824
    exit(1);
839
825
}
840
826
 
 
827
static int
 
828
accept_local_connections(fd_set *readfds)
 
829
{
 
830
    int rc;
 
831
 
 
832
    if(local_server_socket < 0 || !FD_ISSET(local_server_socket, readfds))
 
833
        return 0;
 
834
 
 
835
    int s;
 
836
    s = accept(local_server_socket, NULL, NULL);
 
837
 
 
838
    if(s < 0) {
 
839
        if(errno != EINTR && errno != EAGAIN) {
 
840
            perror("accept(local_server_socket)");
 
841
            return -1;
 
842
        }
 
843
        return 0;
 
844
    }
 
845
 
 
846
    if(num_local_sockets >= MAX_LOCAL_SOCKETS) {
 
847
        /* This should never happen, since we don't select for
 
848
           the server socket in this case.  But I'm paranoid. */
 
849
        fprintf(stderr, "Internal error: too many local sockets.\n");
 
850
        close(s);
 
851
        return -1;
 
852
    }
 
853
 
 
854
    rc = fcntl(s, F_GETFL, 0);
 
855
    if(rc < 0) {
 
856
        fprintf(stderr, "Unable to get flags of local socket.\n");
 
857
        close(s);
 
858
        return -1;
 
859
    }
 
860
 
 
861
    rc = fcntl(s, F_SETFL, (rc | O_NONBLOCK));
 
862
    if(rc < 0) {
 
863
        fprintf(stderr, "Unable to set flags of local socket.\n");
 
864
        close(s);
 
865
        return -1;
 
866
    }
 
867
 
 
868
    local_sockets[num_local_sockets++] = s;
 
869
    local_notify_all_1(s);
 
870
    return 1;
 
871
}
 
872
 
841
873
void
842
874
schedule_neighbours_check(int msecs, int override)
843
875
{