Provide restricted interfaces to reduce preconditons and avoid usage errors.
This should probably be imlementations of more general Acceptor, Connector and Data Connection concepts, that could also be implemented with pipes, etc.
As mentioned by Boris Schaeling in http://article.gmane.org/gmane.comp.lib.boost.devel/12323 there are several io models that could be supported.