Having nl_recvmsgs() return the number of read messages allows
to continue reading until the underlying recvmsg() will return
EAGAIN for the non blocking socket.
*/
int nl_cache_mngr_data_ready(struct nl_cache_mngr *mngr)
{
- int err;
+ int err, nread = 0;
struct nl_cb *cb;
NL_DBG(2, "Cache manager %p, reading new data from fd %d\n",
nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, event_input, mngr);
- err = nl_recvmsgs(mngr->cm_sock, cb);
+ while ((err = nl_recvmsgs(mngr->cm_sock, cb)) > 0) {
+ NL_DBG(2, "Cache manager %p, recvmsgs read %d messages\n",
+ mngr, err);
+ nread += err;
+ }
+
nl_cb_put(cb);
if (err < 0)
return err;
- return 1;
+ return nread;
}
/**