char *name;
};
+int exit_all = 0;
+
+#define EXTRA_DEBUG 0
+
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
return -1;
}
- printf("Registering handler for %s, fd %d\n",
- handler->name, handler->ev.data.fd);
+ if (EXTRA_DEBUG)
+ printf("Registering handler for %s, fd %d\n",
+ handler->name, handler->ev.data.fd);
ev.data.fd = handler->ev.data.fd;
ev.data.ptr = handler;
goto out_free;
}
- printf("%s: Got %s", __func__, conn->buf);
+ if (EXTRA_DEBUG)
+ printf("%s: Got %s", __func__, conn->buf);
conn->min_timestamp = atoi(conn->buf);
}
}
out_free:
- printf("%s: Closing socket %d\n", __func__, conn->fd);
+ if (EXTRA_DEBUG)
+ printf("%s: Closing socket %d\n", __func__, conn->fd);
+
close(conn->fd);
free(conn);
struct sockaddr_in addr;
struct listening_socket incoming;
int sockfd, ret;
+ int enable = 1;
bzero(&addr, sizeof(addr));
bzero(&incoming, sizeof(incoming));
sockfd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);
if (sockfd < 0) {
printf("Failed to create socket: %m\n");
- return NULL;
+ goto out;
}
+ ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int));
+ if (ret < 0)
+ printf("Error setting SO_REUSEADDR: %m\n");
+
addr.sin_family = AF_INET;
- addr.sin_port = htons(6000);
+ addr.sin_port = htons(8347);
addr.sin_addr.s_addr = INADDR_ANY;
ret = bind(sockfd, (struct sockaddr *)&addr, sizeof(addr));
struct epoll_event ev;
struct event_handler *h;
- printf("%s: Waiting for events..\n", __func__);
+ if (EXTRA_DEBUG)
+ printf("%s: Waiting for events..\n", __func__);
+
ret = epoll_wait(bme->epollfd, &ev, 1, -1);
if (ret == -1) {
if (errno != EINTR) {
printf("epoll_wait: %m\n");
- return NULL;
+ goto close_socket;
}
continue;
h = ev.data.ptr;
- printf("Handling %s %s event for %s\n",
- ev.events & EPOLLIN ? "incoming" : "",
- ev.events & EPOLLOUT ? "outgoing" : "",
- h->name);
+ if (EXTRA_DEBUG)
+ printf("Handling %s %s event for %s\n",
+ ev.events & EPOLLIN ? "incoming" : "",
+ ev.events & EPOLLOUT ? "outgoing" : "",
+ h->name);
+
h->ev = ev;
h->handle_event(h);
}
close_socket:
close(sockfd);
+out:
+ exit_all = 1;
return NULL;
}
struct tm *now;
time_t t;
+ ret = 0;
+ if (exit_all)
+ break;
+
ret = bme280_set_sensor_mode(BME280_FORCED_MODE, dev);
if (ret) {
fprintf(stderr, "Failed to set sensor mode (code %+d).", ret);
printf("%s %0.4lf deg C, %0.4lf hPa, %0.4lf%%, dp: %.3f C\n",
s, temp, press, hum, dew);
+ fflush(stdout);
pthread_mutex_lock(&bme->lock);
for (i = 0; i < ARRAY_SIZE(bme->data) - 1; i++)