Hi All.

I see https://github.com/golang/go/issues/10940 issue that relates to my 
problem, and it looks like I must read from / write to a connetion to check 
whether it is alive, but want to ask if something get changed since this 
bug was closed without a fix.

A bit of context:

I'm dialing to remote server, then "swapping sides" and establish a gRPC 
listener on a client side, while remote server becomes gRPC client:

func connectAndServe(service *controlPCService) error {
        conn, err := net.Dial("tcp", config.CloudURL)
        if err != nil {
                return err
        }

        err = conn.(*net.TCPConn).SetKeepAlive(true)
        if err != nil {
                conn.Close()
                return err
        }

        err = conn.(*net.TCPConn).SetKeepAlivePeriod(10 * time.Second)
        if err != nil {
                conn.Close()
                return err
        }

        var opts []grpc.ServerOption
        grpcServer := grpc.NewServer(opts...)

        service.grpcServer = grpcServer
        pb.RegisterControlPCServiceServer(grpcServer, service)
        grpcServer.Serve(NewListener(conn)) // it blocks
        return nil
}

NewListener(conn) just returns this connection once to gRPC server, and 
then blocks to emulate a situation, that there are no other connections. 
The problem here, is that gRPC server still thinks that it is a server => 
after this single connection was closed by remote side, it just waits for 
another one instead of exiting.

AFAIU the only thing I can do here is to listen on connection for POLLHUP 
or try to read 0 bytes from it until I get EOF, but as the issue 10940 
says, I can't do it. Is there any means to overcome it except of 
implemening some kind of keepalive logic using gRPC calls?

Thanks in advance,
Sergey.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to