This function has a potential infinite while loop. Is there a mechanism to poll the socket outside of this function?
static int w_lte_lc_init_and_connect(struct device *unused) { int err; int at_socket_fd; u8_t buffer[LC_MAX_READ_LENGTH]; at_socket_fd = socket(AF_LTE, 0, NPROTO_AT); if (at_socket_fd == -1) { return -EFAULT; } #if defined(CONFIG_LTE_EDRX_REQ) /* Request configured eDRX settings to save power */ err = at_cmd(at_socket_fd, edrx_req, AT_CMD_SIZE(edrx_req)); if (err) { close(at_socket_fd); return err; } #endif err = at_cmd(at_socket_fd, subscribe, AT_CMD_SIZE(subscribe)); if (err) { close(at_socket_fd); return err; } #if defined(CONFIG_LTE_LOCK_BANDS) /* Set LTE band lock (volatile setting). * Has to be done every time before activating the modem. */ err = at_cmd(at_socket_fd, lock_bands, AT_CMD_SIZE(lock_bands)); if (err) { close(at_socket_fd); return err; } #endif #if defined(CONFIG_LTE_LEGACY_PCO_MODE) err = at_cmd(at_socket_fd, legacy_pco, AT_CMD_SIZE(legacy_pco)); if (err) { close(at_socket_fd); return err; } LOG_INF("Using legacy LTE PCO mode..."); #endif #if defined(CONFIG_LTE_PDP_CMD) err = at_cmd(at_socket_fd, cgdcont, AT_CMD_SIZE(cgdcont)); if (err) { close(at_socket_fd); return err; } LOG_INF("PDP Context: %s", cgdcont); #endif err = at_cmd(at_socket_fd, network_mode, AT_CMD_SIZE(network_mode)); if (err) { close(at_socket_fd); return err; } err = at_cmd(at_socket_fd, normal, AT_CMD_SIZE(normal)); if (err) { close(at_socket_fd); return err; } while (true) { int bytes; bytes = recv(at_socket_fd, buffer, LC_MAX_READ_LENGTH, 0); if (bytes) { LOG_DBG("recv: %s", buffer); if (!memcmp(status1, buffer, AT_CMD_SIZE(status1)) || !memcmp(status2, buffer, AT_CMD_SIZE(status2)) || !memcmp(status3, buffer, AT_CMD_SIZE(status3)) || !memcmp(status4, buffer, AT_CMD_SIZE(status4))) { break; } } } close(at_socket_fd); return 0; }