datagram: return whole endpoint, not just channel
datagram: split handle/1,2 into separate named functions