I'm curious about this.  Something to do with memory management?  A comment here would be nice, at least.

If I'm right, then I guess this is a memory leak - a bounded one, though?  The negotiated protocol string will live as long as ... oops, as long as the `Context`.  What if the same `Context` is used to establish multiple connections?  Then the bytes from `outstr` might not live long enough?

You might need to keep this memory alive using references on the `Connection` instance instead.