Environment
- Mac
- nrf tag; 1.1.0
- modem fw: 1.1.0
- DK 0.8.5
- debugging by SEGGER RTT
The program polls SMS for a certain time and if SMS is received, it reads the messages.
When the message is read by blocking_recv, the program hangs up. I coded this program referring to this source:
https://github.com/Rallare/fw-nrfconnect-nrf/blob/nrf9160_samples/samples/nrf9160/simple_at/src/main.c
Also "(sms_notif_fd_s.revents & POLLIN) == POLLIN" sometimes gets true although I don't send SMS to the device.
This symptom did not happen with v1.1.0 of nrf_tag and v1.1.0 of modem
int blocking_recv(int fd, u8_t *buf, u32_t size, u32_t flags)
{
int err;
do {
err = recv(fd, buf, size, flags);
} while (err < 0 && errno == EAGAIN);
return err;
}
void main(void)
{
sms_notif_fd = socket(AF_LTE, 0, NPROTO_AT);
sms_notif_fd_s.fd = sms_notif_fd;
sms_notif_fd_s.events = POLLIN;
/* MQTT connect, publish, and disconnect here */
while (1) {
err = poll(&sms_notif_fd_s, 1, K_SECONDS(60));
if (err < 0) {
SEGGER_RTT_printf(0,"ERROR: poll %d\n", errno);
break;
}
if ((sms_notif_fd_s.revents & POLLIN) == POLLIN) { // This sometimes gets true although I don't send SMS to the device
SEGGER_RTT_printf(0,"before blocking_recv\n");
sms_notif_bytes = blocking_recv(sms_notif_fd, sms_notif_buf, SMS_NOTIF_BUF_LEN, MSG_DONTWAIT); // Error; stuck here
SEGGER_RTT_printf(0,"sms is received!\n");
.
.
}
if ((sms_notif_fd_s.revents & POLLERR) == POLLERR) {
SEGGER_RTT_printf(0,"POLLERR\n");
break;
}
if ((sms_notif_fd_s.revents & POLLNVAL) == POLLNVAL) {
SEGGER_RTT_printf(0,"POLLNVAL\n");
break;
}
}
Why does this happen and how can I solve this?
Should I close and open a socket at a certain interval?
I erase previous program by "nrfjprog -e" everytime I flash a new one, and delete an old build folder before building a new program.
Thanks!
---- update -----
when blocking_recv is stuck, err = -1 and errno = 11 are always reported.