receiver should implement a net.Listener