This is to make socket implementations independent of the host OS. this is done by creating an interface that define all required behaviors of the socket.