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).
Well this basic class includes the current Data subclass which can be changed when using sslsockets so the basic class is a minimal class hiding the socket by using its own subclass (at the moment Data)
Which makes it possible to use any underlying connection as long as it is able to acces it with read and write ...