API can return success (0), but reply buffer might be invalid. There are three code paths that can return a success, but have no (valid) message. In case of two I think it should be a failure. In rte_mp_request_sync there is a call to mp_request_sync which may return 0 with no message in case of: - failure to send the message on behalf of remote - the caller not caring about reply message. (this is probably fine) This is then returned as 0 by rte_mp_request_sync (docs say that it will return 0 on success). If IPC is disabled rte_mp_request_sync also return 0, but i think it should be a failure (it did not send anything, it did not received anything because operation is not supported).
I'm not sure i follow. If the remote end failed to send the message, nb_received would not be incremented, and it would obviously not be safe to attempt to read the message. That's why nb_received is there - to let the caller know how many buffers have actually arrived. The function returning 0 when remote end has failed to send a response is intentional - it is not up to the API to decide whether this is an error condition (i.e. if the caller considers mismatch between nb_sent and nb_received to be an error). Not sure about the "not supported" part - perhaps it indeed should return -1 and set rte_errno to ENOTSUP.