a basic socket class with minimal function, derived classes like TcpSocket and UdpSocket with extended functionality.
I think this is a little bit problematic if you take into account SSL issue. It is perhaps better to have single complex Socket class that can be opened both in SSL and non-SSL mode (2 implementations vs 4 implementations).