This abstract class serves as the parent class for socket implementations.
The implementation class serves an intermediary to routines that
perform the actual socket operations. It hides the buffering and
blocking behavior of the Socket classes.
A default implementation is provided by each address family, but
this can be changed by class methods on SocketAddress sublcasses.