|
|
@ -6,6 +6,7 @@ |
|
|
*/ |
|
|
*/ |
|
|
#include <sys/types.h> |
|
|
#include <sys/types.h> |
|
|
#include <sys/socket.h> |
|
|
#include <sys/socket.h> |
|
|
|
|
|
#include <sys/poll.h> |
|
|
#include <netinet/in.h> |
|
|
#include <netinet/in.h> |
|
|
#include <arpa/inet.h> |
|
|
#include <arpa/inet.h> |
|
|
#include <unistd.h> |
|
|
#include <unistd.h> |
|
|
@ -246,9 +247,7 @@ static inline void copy_with_lock(struct totalstats *ts_dst, struct totalstats * |
|
|
void graphite_loop_run(struct callmaster *cm, endpoint_t *graphite_ep, int seconds) { |
|
|
void graphite_loop_run(struct callmaster *cm, endpoint_t *graphite_ep, int seconds) { |
|
|
|
|
|
|
|
|
int rc=0; |
|
|
int rc=0; |
|
|
fd_set wfds; |
|
|
|
|
|
FD_ZERO(&wfds); |
|
|
|
|
|
struct timeval tv; |
|
|
|
|
|
|
|
|
struct pollfd wfds[1]; |
|
|
|
|
|
|
|
|
// sanity checks |
|
|
// sanity checks |
|
|
if (!cm) { |
|
|
if (!cm) { |
|
|
@ -262,12 +261,11 @@ void graphite_loop_run(struct callmaster *cm, endpoint_t *graphite_ep, int secon |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (connection_state == STATE_IN_PROGRESS && graphite_sock.fd >= 0) { |
|
|
if (connection_state == STATE_IN_PROGRESS && graphite_sock.fd >= 0) { |
|
|
FD_SET(graphite_sock.fd,&wfds); |
|
|
|
|
|
tv.tv_sec = 0; |
|
|
|
|
|
tv.tv_usec = 1000000; |
|
|
|
|
|
|
|
|
wfds[0].fd=graphite_sock.fd; |
|
|
|
|
|
wfds[0].events = POLLOUT | POLLERR | POLLHUP | POLLNVAL; |
|
|
|
|
|
|
|
|
rc = select (graphite_sock.fd+1, NULL, &wfds, NULL, &tv); |
|
|
|
|
|
if ((rc == -1) && (errno == EINTR)) { |
|
|
|
|
|
|
|
|
rc = poll(wfds,1,1000); |
|
|
|
|
|
if (rc == -1) { |
|
|
ilog(LOG_ERROR,"Error on the socket."); |
|
|
ilog(LOG_ERROR,"Error on the socket."); |
|
|
close_socket(&graphite_sock); |
|
|
close_socket(&graphite_sock); |
|
|
connection_state = STATE_DISCONNECTED; |
|
|
connection_state = STATE_DISCONNECTED; |
|
|
@ -276,8 +274,8 @@ void graphite_loop_run(struct callmaster *cm, endpoint_t *graphite_ep, int secon |
|
|
// timeout |
|
|
// timeout |
|
|
return; |
|
|
return; |
|
|
} else { |
|
|
} else { |
|
|
if (!FD_ISSET(graphite_sock.fd,&wfds)) { |
|
|
|
|
|
ilog(LOG_WARN,"fd active but not the graphite fd."); |
|
|
|
|
|
|
|
|
if (!(wfds[0].revents & POLLOUT)) { |
|
|
|
|
|
ilog(LOG_WARN,"fd is active but not ready for writing, poll events=%x",wfds[0].revents); |
|
|
close_socket(&graphite_sock); |
|
|
close_socket(&graphite_sock); |
|
|
connection_state = STATE_DISCONNECTED; |
|
|
connection_state = STATE_DISCONNECTED; |
|
|
return; |
|
|
return; |
|
|
|