Add basic socket abstraction