diff --git a/radio/ETHERNET/USERSPACE/LIB/eth_udp.c b/radio/ETHERNET/USERSPACE/LIB/eth_udp.c index 45cc75bd4d2c9a99d51a763e6399935fe862808a..31971f1d1adbf2a0e9eea538185b7d8f2ea5cd2c 100644 --- a/radio/ETHERNET/USERSPACE/LIB/eth_udp.c +++ b/radio/ETHERNET/USERSPACE/LIB/eth_udp.c @@ -447,10 +447,20 @@ void *udp_read_thread(void *arg) { while (oai_exit == 0) { LOG_I(PHY,"UDP read thread %d, waiting for start sampling_rate_d %d, sampling_rate_n %d\n",u->thread_id,device->sampling_rate_ratio_n,device->sampling_rate_ratio_d); while (fhstate->active > 0) { - size_t count = recvfrom(((eth_state_t*)device->priv)->sockfdd[0], - buffer,sizeof(buffer),0, - (struct sockaddr *)&((eth_state_t*)device->priv)->dest_addrd, - (socklen_t *)&((eth_state_t*)device->priv)->addr_len); + ssize_t count = recvfrom(((eth_state_t*)device->priv)->sockfdd[0], + buffer,sizeof(buffer),0, + (struct sockaddr *)&((eth_state_t*)device->priv)->dest_addrd, + (socklen_t *)&((eth_state_t*)device->priv)->addr_len); + /* log and skip processing in case of error from recvfrom */ + /* (to be refined if needed) */ + if (count == 0) { + LOG_E(PHY, "recvfrom returned 0\n"); + continue; + } + if (count < 0) { + LOG_E(PHY, "recvfrom failed (%s)\n", strerror(errno)); + continue; + } /* if oai_exit is 1 here, don't access the array rxbase, * it may have been freed(), so let's break at this point */ @@ -460,7 +470,6 @@ void *udp_read_thread(void *arg) { TS = *(openair0_timestamp *)(&buffer[ECPRICOMMON_BYTES+ECPRIPCID_BYTES]); // convert TS to samples, /6 for AW2S @ 30.72 Ms/s, this is converted for other sample rates in OAI application TS = (device->sampling_rate_ratio_n*TS)/(device->sampling_rate_ratio_d*6); - if ((int)count <= 0) continue; AssertFatal(aid < 8,"Cannot handle more than 8 antennas, got aid %d\n",aid); fhstate->r[aid]=1; if (aid==0 && first_read == 0) fhstate->TS0 = TS;