X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fmemcached.c;h=90f323f8be5ebfc005037bd9e33829723008e383;hb=c97b1e4da74fb2a5f18ab648d674abca9f70ff69;hp=36b3c9a97c15831abf11ee9dd520f81c995750b0;hpb=1d1e565400b7c770db22e25ad97c06ceab0170ad;p=collectd.git diff --git a/src/memcached.c b/src/memcached.c index 36b3c9a9..90f323f8 100644 --- a/src/memcached.c +++ b/src/memcached.c @@ -67,6 +67,7 @@ static void memcached_free(void *arg) { if (st->fd >= 0) { shutdown(st->fd, SHUT_RDWR); close(st->fd); + st->fd = -1; } sfree(st->name); @@ -163,9 +164,9 @@ static int memcached_connect_inet(memcached_t *st) { } /* Wait until connection establishes */ - struct pollfd pollfd; - pollfd.fd = fd; - pollfd.events = POLLOUT; + struct pollfd pollfd = { + .fd = fd, .events = POLLOUT, + }; do status = poll(&pollfd, 1, MEMCACHED_CONNECT_TIMEOUT); while (status < 0 && errno == EINTR); @@ -177,9 +178,8 @@ static int memcached_connect_inet(memcached_t *st) { /* Check if all is good */ int socket_error; - socklen_t socket_error_len = sizeof(socket_error); status = getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *)&socket_error, - &socket_error_len); + &(socklen_t){sizeof(socket_error)}); if (status != 0 || socket_error != 0) { close(fd); fd = -1; @@ -219,9 +219,9 @@ static int memcached_query_daemon(char *buffer, size_t buffer_size, return -1; } - struct pollfd pollfd; - pollfd.fd = st->fd; - pollfd.events = POLLOUT; + struct pollfd pollfd = { + .fd = st->fd, .events = POLLOUT, + }; do status = poll(&pollfd, 1, MEMCACHED_IO_TIMEOUT); @@ -472,6 +472,13 @@ static int memcached_read(user_data_t *user_data) { } else if (FIELD_IS("listen_disabled_num")) { submit_derive("connections", "listen_disabled", atof(fields[2]), st); } + /* + * Total number of connections opened since the server started running + * Report this as connection rate. + */ + else if (FIELD_IS("total_connections")) { + submit_derive("connections", "opened", atof(fields[2]), st); + } /* * Commands