/**
* collectd - src/memcached.c, based on src/hddtemp.c
- * Copyright (C) 2007 Antony Dovgal
- * Copyright (C) 2005,2006 Vincent Stehlé
- * Copyright (C) 2009 Franck Lombardi
+ * Copyright (C) 2007 Antony Dovgal
+ * Copyright (C) 2007-2009 Florian Forster
+ * Copyright (C) 2009 Doug MacEachern
+ * Copyright (C) 2009 Franck Lombardi
*
* 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
*
* Authors:
* Antony Dovgal <tony at daylessday dot org>
- * Vincent Stehlé <vincent.stehle at free.fr>
* Florian octo Forster <octo at verplant.org>
+ * Doug MacEachern <dougm at hyperic.com>
* Franck Lombardi
**/
# include <netinet/in.h>
# include <netinet/tcp.h>
+/* Hack to work around the missing define in AIX */
+#ifndef MSG_DONTWAIT
+# define MSG_DONTWAIT MSG_NONBLOCK
+#endif
+
#define MEMCACHED_DEF_HOST "127.0.0.1"
#define MEMCACHED_DEF_PORT "11211"
int i = 0;
if (memcached_socket != NULL) {
-
struct sockaddr_un serv_addr;
- memset(&serv_addr, '\0', sizeof (serv_addr));
+ memset (&serv_addr, 0, sizeof (serv_addr));
serv_addr.sun_family = AF_UNIX;
- strncpy(serv_addr.sun_path, memcached_socket, sizeof (serv_addr.sun_path));
+ sstrncpy (serv_addr.sun_path, memcached_socket,
+ sizeof (serv_addr.sun_path));
/* create our socket descriptor */
- if ((fd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) {
+ fd = socket (AF_UNIX, SOCK_STREAM, 0);
+ if (fd < 0) {
char errbuf[1024];
- ERROR ("memcached: unix socket: %s", sstrerror (errno, errbuf, sizeof (errbuf)));
+ ERROR ("memcached: unix socket: %s", sstrerror (errno, errbuf,
+ sizeof (errbuf)));
return -1;
}
/* connect to the memcached daemon */
- if (connect (fd, (struct sockaddr *) &serv_addr, SUN_LEN(&serv_addr))) {
- shutdown(fd, SHUT_RDWR);
- close(fd);
+ status = (ssize_t) connect (fd, (struct sockaddr *) &serv_addr,
+ sizeof (serv_addr));
+ if (status != 0) {
+ shutdown (fd, SHUT_RDWR);
+ close (fd);
fd = -1;
}
-
- } else {
-
+ }
+ else { /* if (memcached_socket == NULL) */
const char *host;
const char *port;
port = MEMCACHED_DEF_PORT;
}
- if ((ai_return = getaddrinfo (host, port, NULL, &ai_list)) != 0) {
+ if ((ai_return = getaddrinfo (host, port, &ai_hints, &ai_list)) != 0) {
char errbuf[1024];
ERROR ("memcached: getaddrinfo (%s, %s): %s",
host, port,
fd = -1;
for (ai_ptr = ai_list; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) {
/* create our socket descriptor */
- if ((fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol)) < 0) {
+ fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol);
+ if (fd < 0) {
char errbuf[1024];
ERROR ("memcached: socket: %s", sstrerror (errno, errbuf, sizeof (errbuf)));
continue;
}
/* connect to the memcached daemon */
- if (connect (fd, (struct sockaddr *) ai_ptr->ai_addr, ai_ptr->ai_addrlen)) {
- shutdown(fd, SHUT_RDWR);
- close(fd);
+ status = (ssize_t) connect (fd, (struct sockaddr *) ai_ptr->ai_addr, ai_ptr->ai_addrlen);
+ if (status != 0) {
+ shutdown (fd, SHUT_RDWR);
+ close (fd);
fd = -1;
continue;
}
static int memcached_read (void) /* {{{ */
{
- char buf[1024];
+ char buf[4096];
char *fields[3];
char *ptr;
char *line;