Yes, the stream is maintained until the client cancels it or the server explicitly finishes it (successfully or exceptionally). The stream is also broken implicitly if a partition causes a disconnect.
In the Java runtime, ChannelImpl includes a ping() method which can be used to verify the connection is in tact. You could periodically issue pings. When the stream completes, either normally (like if server closes stream on shutdown) or exceptionally (e.g. connection breaks), the client can just re-issue the RPC, which will create a new stream on a new underlying connection.
There is also a simple health-check service that will be available (
https://github.com/grpc/grpc/pull/2806), which can be registered in both clients and servers and allow you to use a separate RPC to poll the status of the server.