listener socket abstraction

allows mock/fake