doRpc sometimes hangs temporarily, followed by a stream reset several seconds later. during this time, context cancellations do nothing.
doRpc takes a context but all it does with it is copy the deadline to the inet stream, so a hanging read or write has no way to close out when the context is canceled.
a quick fix for this would be to start a goroutine that sets the stream deadline to zero if context cancellation is detected, but not sure how much overhead that'll introduce