This is a fix for #26.
Socket.close is called to cleanup resources, but it currently throws, at least in some cases.
According to the spec, this can happen because of an error at the protocol level, or when the connection fails. This is apparently what is happening in #26 when the remote closes a connection. Unidirectional shutdowns still tries do signal the remote that the connection should end, and it cannot throw. This is probably safer, as I don't think it is ever expected that the release end of a bracket can throw.