rework dispatcher receive_ret()