static void internal_event_handler(wifi_handle handle, int events) { if (events & POLLERR) { ALOGE("Error reading from socket"); internal_pollin_handler(handle); } else if (events & POLLHUP) { ALOGE("Remote side hung up"); } else if (events & POLLIN) { ALOGV("Found some events!!!"); internal_pollin_handler(handle); } else { ALOGE("Unknown event - %0x", events); } }
/* Run event handler */ void wifi_event_loop(wifi_handle handle) { hal_info *info = getHalInfo(handle); if (info->in_event_loop) { return; } else { info->in_event_loop = true; } pollfd pfd; memset(&pfd, 0, sizeof(pfd)); pfd.fd = nl_socket_get_fd(info->event_sock); pfd.events = POLLIN; /* TODO: Add support for timeouts */ do { int timeout = -1; /* Infinite timeout */ pfd.revents = 0; // ALOGI("Polling socket"); int result = poll(&pfd, 1, -1); if (result < 0) { ALOGE("Error polling socket"); } else if (pfd.revents & POLLERR) { ALOGE("POLL Error; error no = %d", errno); char buf[2048]; int result2 = read(pfd.fd, buf, sizeof(buf)); ALOGE("Read after POLL returned %d, error no = %d", result2, errno); } else if (pfd.revents & POLLHUP) { ALOGE("Remote side hung up"); break; } else if (pfd.revents & POLLIN) { // ALOGI("Found some events!!!"); internal_pollin_handler(handle); } else { ALOGE("Unknown event - %0x", pfd.revents); } } while (!info->clean_up); ALOGI("Cleaning up"); internal_cleaned_up_handler(handle); }