X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fmemcached.c;h=23054aaf3802c60b1eab9d1da18671d20cea2049;hb=2b65cef7870c385b9b56b34701ced62528f3f7c0;hp=ddea2ea2f0926874775c1d20cc1ac5bce6a2c74d;hpb=efbeffe4cc730d6e14ba45dddfee9ab5229f07dc;p=collectd.git diff --git a/src/memcached.c b/src/memcached.c index ddea2ea2..23054aaf 100644 --- a/src/memcached.c +++ b/src/memcached.c @@ -1,7 +1,8 @@ /** * collectd - src/memcached.c, based on src/hddtemp.c - * Copyright (C) 2007 Antony Dovgal - * Copyright (C) 2005,2006 Vincent Stehlé + * Copyright (C) 2007 Antony Dovgal + * Copyright (C) 2007-2009 Florian Forster + * Copyright (C) 2009 Doug MacEachern * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -19,8 +20,8 @@ * * Authors: * Antony Dovgal - * Vincent Stehlé * Florian octo Forster + * Doug MacEachern **/ #include "collectd.h" @@ -127,17 +128,29 @@ static int memcached_query_daemon (char *buffer, int buffer_size) /* {{{ */ { struct pollfd p; - int n; + int status; + memset (&p, 0, sizeof (p)); p.fd = fd; - p.events = POLLIN|POLLERR|POLLHUP; + p.events = POLLIN | POLLERR | POLLHUP; p.revents = 0; - n = poll(&p, 1, 3); - - if (n <= 0) { - ERROR ("memcached: poll() failed or timed out"); - return -1; + status = poll (&p, /* nfds = */ 1, /* timeout = */ 1000 * interval_g); + if (status <= 0) + { + if (status == 0) + { + ERROR ("memcached: poll(2) timed out after %i seconds.", interval_g); + } + else + { + char errbuf[1024]; + ERROR ("memcached: poll(2) failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + } + shutdown (fd, SHUT_RDWR); + close (fd); + return (-1); } }