gRPC improvements:
gRPC improvements:

- Differentiate between the server terminating abruptly and it erroneously not returning an exit code.
- Do not assume that the message buffer stays untouched on the last call to Read() that eventually returns false.

There is a small chance that the channel will be shut down because it's idle between Read() returning false and us checking the state. Unfortunately, I haven't found a way to set the idle timeout from C++ :(

--
PiperOrigin-RevId: 147321404
MOS_MIGRATED_REVID=147321404

perezd/bazel,ButterflyNetwork/bazel,Asana/bazel,kchodorow/bazel-1,davidzchen/bazel,dropbox/bazel,werkt/bazel,meteorcloudy/bazel,dslomov/bazel,perezd/bazel,cushon/bazel,akira-baruah/bazel,aehlig/bazel,aehlig/bazel,akira-baruah/bazel,spxtr/bazel,dslomov/bazel,davidzchen/bazel,kchodorow/bazel-1,variac/bazel,cushon/bazel,dslomov/bazel,Asana/bazel,ulfjack/bazel,dslomov/bazel-windows,safarmer/bazel,safarmer/bazel,kchodorow/bazel,cushon/bazel,snnn/bazel,dropbox/bazel,ulfjack/bazel,Asana/bazel,damienmg/bazel,Asana/bazel,damienmg/bazel,safarmer/bazel,ulfjack/bazel,perezd/bazel,kchodorow/bazel,dslomov/bazel,davidzchen/bazel,ButterflyNetwork/bazel,kchodorow/bazel-1,variac/bazel,cushon/bazel,bazelbuild/bazel,variac/bazel,perezd/bazel,juhalindfors/bazel-patches,juhalindfors/bazel-patches,ButterflyNetwork/bazel,dslomov/bazel,twitter-forks/bazel,variac/bazel,cushon/bazel,perezd/bazel,ulfjack/bazel,dslomov/bazel-windows,damienmg/bazel,meteorcloudy/bazel,kchodorow/bazel,Asana/bazel,kchodorow/bazel,perezd/bazel,dslomov/bazel,variac/bazel,meteorcloudy/bazel,aehlig/bazel,bazelbuild/bazel,spxtr/bazel,katre/bazel,spxtr/bazel,aehlig/bazel,akira-baruah/bazel,damienmg/bazel,ulfjack/bazel,bazelbuild/bazel,akira-baruah/bazel,Asana/bazel,kchodorow/bazel,spxtr/bazel,kchodorow/bazel,dslomov/bazel,davidzchen/bazel,werkt/bazel,bazelbuild/bazel,snnn/bazel,juhalindfors/bazel-patches,dropbox/bazel,dropbox/bazel,spxtr/bazel,cushon/bazel,snnn/bazel,safarmer/bazel,meteorcloudy/bazel,snnn/bazel,ulfjack/bazel,ButterflyNetwork/bazel,twitter-forks/bazel,werkt/bazel,ButterflyNetwork/bazel,katre/bazel,dslomov/bazel-windows,kchodorow/bazel-1,aehlig/bazel,meteorcloudy/bazel,davidzchen/bazel,twitter-forks/bazel,perezd/bazel,Asana/bazel,spxtr/bazel,katre/bazel,bazelbuild/bazel,werkt/bazel,twitter-forks/bazel,damienmg/bazel,safarmer/bazel,variac/bazel,kchodorow/bazel,meteorcloudy/bazel,davidzchen/bazel,safarmer/bazel,akira-baruah/bazel,twitter-forks/bazel,damienmg/bazel,snnn/bazel,dropbox/bazel,juhalindfors/bazel-patches,juhalindfors/bazel-patches,variac/bazel,aehlig/bazel,katre/bazel,dropbox/bazel,kchodorow/bazel-1,werkt/bazel,juhalindfors/bazel-patches,dslomov/bazel-windows,snnn/bazel,dslomov/bazel-windows,dslomov/bazel-windows,bazelbuild/bazel,davidzchen/bazel,aehlig/bazel,ButterflyNetwork/bazel,twitter-forks/bazel,ulfjack/bazel,meteorcloudy/bazel,werkt/bazel,snnn/bazel,spxtr/bazel,juhalindfors/bazel-patches,akira-baruah/bazel,katre/bazel,kchodorow/bazel-1,damienmg/bazel,twitter-forks/bazel,katre/bazel