send and recv are now wrapped by macros