add recv helper function