X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Frrd_daemon.c;h=c438028134ed5c27b2f89edf8853c529d1c1ad89;hb=81c5c973ffc8e6d305f533f5ea2e6e407beca865;hp=a94e0794f649a9b323bf4bd42973b75d00d5d929;hpb=f2d480b190c1f4199e86ff3095a4fb6ac641a4bb;p=rrdtool.git diff --git a/src/rrd_daemon.c b/src/rrd_daemon.c index a94e079..c438028 100644 --- a/src/rrd_daemon.c +++ b/src/rrd_daemon.c @@ -1479,12 +1479,11 @@ static void *connection_thread_main (void *args) /* {{{ */ status = handle_request (fd, buffer, /*buffer_size=*/ status); if (status != 0) - { - close (fd); break; - } } + close(fd); + self = pthread_self (); /* Remove this thread from the connection threads list */ pthread_mutex_lock (&connection_threads_lock); @@ -1643,6 +1642,7 @@ static int open_listen_socket (const char *addr_orig) /* {{{ */ { int fd; listen_socket_t *temp; + int one = 1; temp = (listen_socket_t *) realloc (listen_fds, sizeof (listen_fds[0]) * (listen_fds_num + 1)); @@ -1661,6 +1661,8 @@ static int open_listen_socket (const char *addr_orig) /* {{{ */ continue; } + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); + status = bind (fd, ai_ptr->ai_addr, ai_ptr->ai_addrlen); if (status != 0) { @@ -1745,8 +1747,12 @@ static void *listen_thread_main (void *args __attribute__((unused))) /* {{{ */ pollfds[i].revents = 0; } - status = poll (pollfds, pollfds_num, /* timeout = */ -1); - if (status < 1) + status = poll (pollfds, pollfds_num, /* timeout = */ 1000); + if (status == 0) + { + continue; /* timeout */ + } + else if (status < 0) { status = errno; if (status != EINTR)