// AcceptSuperServiceClient accepts connections on the listener and serves requests // for each incoming connection. Accept blocks; the caller typically // invokes it in a go statement. func AcceptSuperServiceClient(lis net.Listener, x SuperService) { srv := rpc.NewServer() if err := srv.RegisterName("SuperService", x); err != nil { log.Fatal(err) } for { conn, err := lis.Accept() if err != nil { log.Fatalf("lis.Accept(): %v\n", err) } go srv.ServeCodec(protorpc.NewServerCodec(conn)) } }
// ListenAndServeSuperService listen announces on the local network address laddr // and serves the given SuperService implementation. func ListenAndServeSuperService(network, addr string, x SuperService) error { lis, err := net.Listen(network, addr) if err != nil { return err } defer lis.Close() srv := rpc.NewServer() if err := srv.RegisterName("SuperService", x); err != nil { return err } for { conn, err := lis.Accept() if err != nil { log.Fatalf("lis.Accept(): %v\n", err) } go srv.ServeCodec(protorpc.NewServerCodec(conn)) } }
func listenAndServeArithAndEchoService(network, addr string) error { clients, err := net.Listen(network, addr) if err != nil { return err } srv := rpc.NewServer() if err := srv.RegisterName("ArithService", new(Arith)); err != nil { return err } if err := srv.RegisterName("EchoService", new(Echo)); err != nil { return err } go func() { for { conn, err := clients.Accept() if err != nil { log.Printf("clients.Accept(): %v\n", err) continue } go srv.ServeCodec(protorpc.NewServerCodec(conn)) } }() return nil }