GError* gridd_client_step(struct client_s *client) { struct pollfd pfd = {-1, 0, 0}; if (!_client_to_pollfd(client, &pfd)) { return NULL; } int rc = metautils_syscall_poll(&pfd, 1, 1000); if (rc == 0) { GTimeVal now; g_get_current_time(&now); gridd_client_expire(client, &now); return NULL; } if (rc < 0) return NEWERROR(errno, "poll errno=%d %s", errno, strerror(errno)); if (pfd.revents & POLLERR) { GError *err = socket_get_error(pfd.fd); g_prefix_error(&err, "%s: ", gridd_client_url(client)); gridd_client_fail(client, err); g_clear_error(&err); } else gridd_client_react(client); return NULL; }
GError* gridd_client_step(struct gridd_client_s *client) { int rc; struct pollfd pfd = {-1, 0, 0}; if (!_client_to_pollfd(client, &pfd)) return NULL; retry: rc = metautils_syscall_poll(&pfd, 1, 1000); if (rc == 0) { gridd_client_expire(client, oio_ext_monotonic_time ()); return NULL; } if (rc < 0) { if (errno == EINTR) goto retry; return NEWERROR(errno, "poll errno=%d %s", errno, strerror(errno)); } if (pfd.revents & POLLERR) { GError *err = socket_get_error(pfd.fd); g_prefix_error(&err, "%s: ", gridd_client_url(client)); gridd_client_fail(client, err); g_clear_error(&err); } else if (pfd.revents & (POLLIN|POLLOUT)) { gridd_client_react(client); } return NULL; }
static void _clients_expire(struct client_s **clients, GTimeVal *now) { if (clients) { struct client_s *c; for (; NULL != (c = *clients) ;++clients) { gridd_client_expire(c, now); } } }
static void _clients_expire(struct gridd_client_s **clients, gint64 now) { if (clients) { struct gridd_client_s *c; for (; NULL != (c = *clients) ;++clients) { gridd_client_expire(c, now); } } }