GithubHelp home page GithubHelp logo

grpc-haskell's Introduction

gRPC – An RPC library and framework

gRPC is a modern, open source, high-performance remote procedure call (RPC) framework that can run anywhere. gRPC enables client and server applications to communicate transparently, and simplifies the building of connected systems.

Homepage: grpc.io
Mailing List: [email protected]

Join the chat at https://gitter.im/grpc/grpc

To start using gRPC

To maximize usability, gRPC supports the standard method for adding dependencies to a user's chosen language (if there is one). In most languages, the gRPC runtime comes as a package available in a user's language package manager.

For instructions on how to use the language-specific gRPC runtime for a project, please refer to these documents

  • C++: follow the instructions under the src/cpp directory
  • C#/.NET: NuGet packages Grpc.Net.Client, Grpc.AspNetCore.Server
  • Dart: pub package grpc
  • Go: go get google.golang.org/grpc
  • Java: Use JARs from Maven Central Repository
  • Kotlin: Use JARs from Maven Central Repository
  • Node: npm install @grpc/grpc-js
  • Objective-C: Add gRPC-ProtoRPC dependency to podspec
  • PHP: pecl install grpc
  • Python: pip install grpcio
  • Ruby: gem install grpc
  • WebJS: follow the grpc-web instructions

Per-language quickstart guides and tutorials can be found in the documentation section on the grpc.io website. Code examples are available in the examples directory.

Precompiled bleeding-edge package builds of gRPC master branch's HEAD are uploaded daily to packages.grpc.io.

To start developing gRPC

Contributions are welcome!

Please read How to contribute which will guide you through the entire workflow of how to build the source code, how to run the tests, and how to contribute changes to the gRPC codebase. The "How to contribute" document also contains info on how the contribution process works and contains best practices for creating contributions.

Troubleshooting

Sometimes things go wrong. Please check out the Troubleshooting guide if you are experiencing issues with gRPC.

Performance

See the Performance dashboard for performance numbers of master branch daily builds.

Concepts

See gRPC Concepts

About This Repository

This repository contains source code for gRPC libraries implemented in multiple languages written on top of a shared C++ core library src/core.

Libraries in different languages may be in various states of development. We are seeking contributions for all of these libraries:

Language Source
Shared C++ [core library] src/core
C++ src/cpp
Ruby src/ruby
Python src/python
PHP src/php
C# (core library based) src/csharp
Objective-C src/objective-c
Language Source repo
Java grpc-java
Kotlin grpc-kotlin
Go grpc-go
NodeJS grpc-node
WebJS grpc-web
Dart grpc-dart
.NET (pure C# impl.) grpc-dotnet
Swift grpc-swift

grpc-haskell's People

Contributors

kolmodin avatar marshall-lee avatar mehrdada avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

grpc-haskell's Issues

c2hs fails on MacOS

c2hs fails with errors like this;

Building grpc-0.1.0.0...
Preprocessing library grpc-0.1.0.0...
c2hs: C header contains errors:

/usr/include/time.h:153: (column 72) [ERROR]  >>> Syntax error !
  The symbol `__attribute__' does not fit here.

It's due to that c2hs fails to parse the C headers. We need something like this in the .cabal file, or add a new header file;

+  cpp-options:
+    -D__attribute__(x)=
+    -Drestrict=
+    -D__qos_class=
+    -D__relative_priority=
+    -D_Nullable=
+    -D_Nonnull=

Remove Rpc monad

The Rpc monad is defined as

type Rpc a = ExceptT RpcError IO a

which is problematic.
It doesn't compose well. Catching errors in the monad gives a false security that exceptions have been caught, since there are also IO exceptions and pure exceptions.
Currently no other feature are needed from the monad except for exceptions (no pun intended).

I'd like to remove the Rpc monad and just throw IO exceptions, and document properly what method will throw, and on best practices.

Read RECV_STATUS_ON_CLIENT during call

RECV_STATUS_ON_CLIENT can be sent at any point during a call.

Currently RECV_STATUS_ON_CLIENT is only checked when the client expect the call to be over, but it can finish much earlier, for example when calling a STATUS_UNIMPLEMENTED method.

Listening for the status needs to be done from the start of the call, and if the status is received it needs to have effect (i.e. return Status) during the next attempt to do a call batch.

Work on interop_client

There's a description of interop tests.
Not all tests are implemented;

  • empty_unary
  • cacheable_unary
  • large_unary
  • client_compressed_unary
  • server_compressed_unary
  • client_streaming
  • client_compressed_streaming
  • server_streaming
  • server_compressed_streaming
  • ping_pong
  • empty_stream
  • compute_engine_creds
  • jwt_token_creds
  • oauth2_auth_token
  • per_rpc_creds
  • custom_metadata
  • status_code_and_message
  • unimplemented_method
  • unimplemented_service
  • cancel_after_begin
  • cancel_after_first_response
  • timeout_on_sleeping_server
  • concurrent_large_unary

High level API for Client

The current Rpc monad does not capture RECV_STATUS_ON_CLIENT well.

Should maybe check for each Rpc operation whether the status has been received, and if so, throw exception to end the execution of Rpc.

Too easy to implement buggy behaviour, if the user doesn't expect an exception and wanted to do more operations?

error: too few arguments to function call grpc_metadata_credentials_create_from_plugin(*plugin, NULL);

I have added grpc-haskell-core as a dependency in 'stack.yaml' as

resolver: lts-16.10

packages:
- .
extra-deps:
  - grpc-haskell-core-0.0.0.0@sha256:4bacd90915321750db570042cd05ada01b9b83c79f6bf6b6ccdef1889b383efa,3306

and 'package.yaml' as

dependencies:
- base >= 4.7 && < 5
- libiserv
- grpc-haskell-core

gcc version

gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.3 (clang-1103.0.32.62)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

I am getting the following error when building my project.

/usr/local/bin/stack build --exec HaskellGRPC-exe
alex             > using precompiled package
clock            > using precompiled package
dlist            > using precompiled package
happy            > using precompiled package
syb              > using precompiled package
managed          > configure
managed          > Configuring managed-1.0.7...
managed          > build
sorted-list      > configure
managed          > Preprocessing library for managed-1.0.7..
managed          > Building library for managed-1.0.7..
managed          > [1 of 2] Compiling Control.Monad.Managed
sorted-list      > Configuring sorted-list-0.2.1.0...
managed          > [2 of 2] Compiling Control.Monad.Managed.Safe
sorted-list      > build
language-c       > configure
sorted-list      > Preprocessing library for sorted-list-0.2.1.0..
sorted-list      > Building library for sorted-list-0.2.1.0..
sorted-list      > [1 of 1] Compiling Data.SortedList
managed          > copy/register
managed          > Installing library in /Users/arazm/.stack/snapshots/x86_64-osx/0dd8bbad2985284979d70b22219992a47532c58a1136e2de96600474c7ab319b/8.8.3/lib/x86_64-osx-ghc-8.8.3/managed-1.0.7-2wFCwv0rolgGQlt0c4eY4p
sorted-list      > 
sorted-list      > /private/var/folders/3v/fq9qzjn51zs0whntld4l5jgm0000gp/T/stack-c3987a047313fbe2/sorted-list-0.2.1.0/Data/SortedList.hs:90:1: warning: [-Wunused-imports]
sorted-list      >     The import of ‘Data.Semigroup’ is redundant
sorted-list      >       except perhaps to import instances from ‘Data.Semigroup’
sorted-list      >     To import instances alone, use: import Data.Semigroup()
sorted-list      >    |
sorted-list      > 90 | import Data.Semigroup (Semigroup (..))
sorted-list      >    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
managed          > Registering library for managed-1.0.7..
language-c       > Configuring language-c-0.8.3...
language-c       > build
language-c       > Preprocessing library for language-c-0.8.3..
sorted-list      > copy/register
sorted-list      > Installing library in /Users/arazm/.stack/snapshots/x86_64-osx/0dd8bbad2985284979d70b22219992a47532c58a1136e2de96600474c7ab319b/8.8.3/lib/x86_64-osx-ghc-8.8.3/sorted-list-0.2.1.0-D0ZLW18REd74px18A6xpU9
sorted-list      > Registering library for sorted-list-0.2.1.0..
language-c       > Building library for language-c-0.8.3..
language-c       > [ 1 of 39] Compiling Language.C.Analysis.NameSpaceMap
language-c       > [ 2 of 39] Compiling Language.C.Data.InputStream
language-c       > [ 3 of 39] Compiling Language.C.Data.Name
language-c       > [ 4 of 39] Compiling Language.C.Data.Position
language-c       > [ 5 of 39] Compiling Language.C.Data.Node
language-c       > [ 6 of 39] Compiling Language.C.Data.Ident
language-c       > [ 7 of 39] Compiling Language.C.Data.Error
language-c       > [ 8 of 39] Compiling Language.C.Data
language-c       > [ 9 of 39] Compiling Language.C.Data.RList
language-c       > [10 of 39] Compiling Language.C.Parser.Builtin
language-c       > [11 of 39] Compiling Language.C.Syntax.Constants
language-c       > [12 of 39] Compiling Language.C.Parser.Tokens
language-c       > [13 of 39] Compiling Language.C.Parser.ParserMonad
language-c       > [14 of 39] Compiling Language.C.Parser.Lexer
language-c       > [15 of 39] Compiling Language.C.Syntax.Ops
language-c       > [16 of 39] Compiling Language.C.Syntax.AST
language-c       > [17 of 39] Compiling Language.C.Syntax
language-c       > [18 of 39] Compiling Language.C.Pretty
language-c       > [19 of 39] Compiling Language.C.Parser.Parser
language-c       > [20 of 39] Compiling Language.C.Parser
language-c       > [21 of 39] Compiling Language.C.Analysis.SemRep
language-c       > [22 of 39] Compiling Language.C.Analysis.TypeConversions
language-c       > [23 of 39] Compiling Language.C.Analysis.SemError
language-c       > [24 of 39] Compiling Language.C.Analysis.DefTable
language-c       > [25 of 39] Compiling Language.C.Analysis.TypeUtils
language-c       > [26 of 39] Compiling Language.C.Analysis.Builtins
language-c       > [27 of 39] Compiling Language.C.Analysis.TravMonad
language-c       > [28 of 39] Compiling Language.C.Analysis.Export
language-c       > [29 of 39] Compiling Language.C.Analysis.Debug
language-c       > [30 of 39] Compiling Language.C.Analysis.AstAnalysis[boot]
language-c       > [31 of 39] Compiling Language.C.Analysis.DeclAnalysis
language-c       > [32 of 39] Compiling Language.C.Analysis.ConstEval
language-c       > [33 of 39] Compiling Language.C.Analysis.TypeCheck
language-c       > [34 of 39] Compiling Language.C.Syntax.Utils
language-c       > [35 of 39] Compiling Language.C.Analysis.AstAnalysis
language-c       > [36 of 39] Compiling Language.C.Analysis
language-c       > [37 of 39] Compiling Language.C.System.Preprocess
language-c       > [38 of 39] Compiling Language.C.System.GCC
language-c       > [39 of 39] Compiling Language.C
language-c       > copy/register
language-c       > Installing library in /Users/arazm/.stack/snapshots/x86_64-osx/0dd8bbad2985284979d70b22219992a47532c58a1136e2de96600474c7ab319b/8.8.3/lib/x86_64-osx-ghc-8.8.3/language-c-0.8.3-4kArQ5LIfBB5px2RmgGRZ
language-c       > Registering library for language-c-0.8.3..
c2hs             > configure
c2hs             > Configuring c2hs-0.28.6...
c2hs             > build
c2hs             > Preprocessing executable 'c2hs' for c2hs-0.28.6..
c2hs             > Building executable 'c2hs' for c2hs-0.28.6..
c2hs             > 
c2hs             > <no location info>: warning: [-Wmissing-home-modules]
c2hs             >     These modules are needed for compilation but not listed in your .cabal file's other-modules: 
c2hs             >         Paths_c2hs
c2hs             > [ 1 of 26] Compiling C2HS.C.Info
c2hs             > [ 2 of 26] Compiling C2HS.Config
c2hs             > [ 3 of 26] Compiling C2HS.Switches
c2hs             > [ 4 of 26] Compiling Control.StateTrans
c2hs             > 
c2hs             > /private/var/folders/3v/fq9qzjn51zs0whntld4l5jgm0000gp/T/stack-c3987a047313fbe2/c2hs-0.28.6/src/Control/StateTrans.hs:77:1: warning: [-Wunused-imports]
c2hs             >     The import of ‘Control.Applicative’ is redundant
c2hs             >       except perhaps to import instances from ‘Control.Applicative’
c2hs             >     To import instances alone, use: import Control.Applicative()
c2hs             >    |
c2hs             > 77 | import Control.Applicative (Applicative(..))
c2hs             >    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
c2hs             > 
c2hs             > /private/var/folders/3v/fq9qzjn51zs0whntld4l5jgm0000gp/T/stack-c3987a047313fbe2/c2hs-0.28.6/src/Control/StateTrans.hs:80:1: warning: [-Wdodgy-imports]
c2hs             >     Module ‘Prelude’ does not export ‘catch’
c2hs             >    |
c2hs             > 80 | import Prelude hiding (catch)
c2hs             >    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
c2hs             > [ 5 of 26] Compiling Data.Errors
c2hs             > [ 6 of 26] Compiling Data.Attributes
c2hs             > [ 7 of 26] Compiling Control.StateBase
c2hs             > 
c2hs             > /private/var/folders/3v/fq9qzjn51zs0whntld4l5jgm0000gp/T/stack-c3987a047313fbe2/c2hs-0.28.6/src/Control/StateBase.hs:59:1: warning: [-Wunused-imports]
c2hs             >     The import of ‘Control.Applicative’ is redundant
c2hs             >       except perhaps to import instances from ‘Control.Applicative’
c2hs             >     To import instances alone, use: import Control.Applicative()
c2hs             >    |
c2hs             > 59 | import Control.Applicative (Applicative(..))
c2hs             >    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
c2hs             > 
c2hs             > /private/var/folders/3v/fq9qzjn51zs0whntld4l5jgm0000gp/T/stack-c3987a047313fbe2/c2hs-0.28.6/src/Control/StateBase.hs:61:1: warning: [-Wunused-imports]
c2hs             >     The import of ‘Control.Monad.Fail’ is redundant
c2hs             >       except perhaps to import instances from ‘Control.Monad.Fail’
c2hs             >     To import instances alone, use: import Control.Monad.Fail()
c2hs             >    |
c2hs             > 61 | import Control.Monad.Fail (MonadFail (..))
c2hs             >    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
c2hs             > [ 8 of 26] Compiling Data.NameSpaces
c2hs             > [ 9 of 26] Compiling C2HS.C.Attrs
c2hs             > [10 of 26] Compiling C2HS.C.Builtin
c2hs             > [11 of 26] Compiling Paths_c2hs
c2hs             > [12 of 26] Compiling C2HS.Version
c2hs             > [13 of 26] Compiling System.CIO
c2hs             > [14 of 26] Compiling Control.State
c2hs             > [15 of 26] Compiling C2HS.State
c2hs             > [16 of 26] Compiling C2HS.C.Trav
c2hs             > [17 of 26] Compiling C2HS.C.Names
c2hs             > [18 of 26] Compiling C2HS.C
c2hs             > [19 of 26] Compiling Text.Lexers
c2hs             > [20 of 26] Compiling C2HS.CHS.Lexer
c2hs             > [21 of 26] Compiling C2HS.CHS
c2hs             > [22 of 26] Compiling C2HS.Gen.Monad
c2hs             > [23 of 26] Compiling C2HS.Gen.Wrapper
c2hs             > [24 of 26] Compiling C2HS.Gen.Header
c2hs             > [25 of 26] Compiling C2HS.Gen.Bind
c2hs             > 
c2hs             > /private/var/folders/3v/fq9qzjn51zs0whntld4l5jgm0000gp/T/stack-c3987a047313fbe2/c2hs-0.28.6/src/C2HS/Gen/Bind.hs:145:1: warning: [-Wunused-imports]
c2hs             >     The import of ‘C2HS.Switches’ is redundant
c2hs             >       except perhaps to import instances from ‘C2HS.Switches’
c2hs             >     To import instances alone, use: import C2HS.Switches()
c2hs             >     |
c2hs             > 145 | import C2HS.Switches   (platformSB)
c2hs             >     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
c2hs             > [26 of 26] Compiling Main
c2hs             > 
c2hs             > <no location info>: warning: [-Wmissing-home-modules]
c2hs             >     These modules are needed for compilation but not listed in your .cabal file's other-modules: 
c2hs             >         Paths_c2hs
c2hs             > Linking .stack-work/dist/x86_64-osx/Cabal-3.0.1.0/build/c2hs/c2hs ...
c2hs             > copy/register
c2hs             > Installing executable c2hs in /Users/arazm/.stack/snapshots/x86_64-osx/0dd8bbad2985284979d70b22219992a47532c58a1136e2de96600474c7ab319b/8.8.3/bin
grpc-haskell-core> configure
grpc-haskell-core> Configuring grpc-haskell-core-0.0.0.0...
grpc-haskell-core> build
grpc-haskell-core> Preprocessing library for grpc-haskell-core-0.0.0.0..
grpc-haskell-core> Building library for grpc-haskell-core-0.0.0.0..
grpc-haskell-core> [ 1 of 21] Compiling Network.GRPC.Unsafe.ChannelArgs
grpc-haskell-core> [ 2 of 21] Compiling Network.GRPC.Unsafe.Constants
grpc-haskell-core> [ 3 of 21] Compiling Network.GRPC.Unsafe.Slice
grpc-haskell-core> [ 4 of 21] Compiling Network.GRPC.Unsafe.Metadata
grpc-haskell-core> 
grpc-haskell-core> /private/var/folders/3v/fq9qzjn51zs0whntld4l5jgm0000gp/T/stack-c3987a047313fbe2/grpc-haskell-core-0.0.0.0/src/Network/GRPC/Unsafe/Metadata.chs:15:1: warning: [-Wunused-imports]
grpc-haskell-core>     The import of ‘Data.Semigroup’ is redundant
grpc-haskell-core>       except perhaps to import instances from ‘Data.Semigroup’
grpc-haskell-core>     To import instances alone, use: import Data.Semigroup()
grpc-haskell-core>    |
grpc-haskell-core> 15 | import Data.Semigroup (Semigroup((<>)))
grpc-haskell-core>    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
grpc-haskell-core> [ 5 of 21] Compiling Network.GRPC.Unsafe.ByteBuffer
grpc-haskell-core> [ 6 of 21] Compiling Network.GRPC.Unsafe.Op
grpc-haskell-core> [ 7 of 21] Compiling Network.GRPC.Unsafe.Time
grpc-haskell-core> [ 8 of 21] Compiling Network.GRPC.Unsafe
grpc-haskell-core> 
grpc-haskell-core> /private/var/folders/3v/fq9qzjn51zs0whntld4l5jgm0000gp/T/stack-c3987a047313fbe2/grpc-haskell-core-0.0.0.0/src/Network/GRPC/Unsafe.chs:17:1: warning: [-Wunused-imports]
grpc-haskell-core>     The import of ‘Data.Semigroup’ is redundant
grpc-haskell-core>       except perhaps to import instances from ‘Data.Semigroup’
grpc-haskell-core>     To import instances alone, use: import Data.Semigroup()
grpc-haskell-core>    |
grpc-haskell-core> 17 | 
grpc-haskell-core>    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
grpc-haskell-core> [ 9 of 21] Compiling Network.GRPC.Unsafe.Security
grpc-haskell-core> [10 of 21] Compiling Network.GRPC.LowLevel.GRPC
grpc-haskell-core> [11 of 21] Compiling Network.GRPC.LowLevel.CompletionQueue.Internal
grpc-haskell-core> [12 of 21] Compiling Network.GRPC.LowLevel.Call
grpc-haskell-core> [13 of 21] Compiling Network.GRPC.LowLevel.CompletionQueue
grpc-haskell-core> [14 of 21] Compiling Network.GRPC.LowLevel.Op
grpc-haskell-core> [15 of 21] Compiling Network.GRPC.LowLevel.Server
grpc-haskell-core> [16 of 21] Compiling Network.GRPC.LowLevel.Client
grpc-haskell-core> [17 of 21] Compiling Network.GRPC.LowLevel.Call.Unregistered
grpc-haskell-core> [18 of 21] Compiling Network.GRPC.LowLevel.CompletionQueue.Unregistered
grpc-haskell-core> [19 of 21] Compiling Network.GRPC.LowLevel.Server.Unregistered
grpc-haskell-core> [20 of 21] Compiling Network.GRPC.LowLevel.Client.Unregistered
grpc-haskell-core> [21 of 21] Compiling Network.GRPC.LowLevel
grpc-haskell-core> 
grpc-haskell-core> /private/var/folders/3v/fq9qzjn51zs0whntld4l5jgm0000gp/T/stack-c3987a047313fbe2/grpc-haskell-core-0.0.0.0/cbits/grpc_haskell.c:533:68: error:
grpc-haskell-core>      error: too few arguments to function call, expected 3, have 2
grpc-haskell-core>       return grpc_metadata_credentials_create_from_plugin(*plugin, NULL);
grpc-haskell-core>              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~              ^
grpc-haskell-core>     |
grpc-haskell-core> 533 |   return grpc_metadata_credentials_create_from_plugin(*plugin, NULL);
grpc-haskell-core>     |                                                                    ^
grpc-haskell-core> 
grpc-haskell-core> /usr/local/Cellar/grpc/1.30.2/include/grpc/grpc_security.h:452:9: error:
grpc-haskell-core>      note: 'grpc_metadata_credentials_create_from_plugin' declared here
grpc-haskell-core>     |
grpc-haskell-core> 452 | GRPCAPI grpc_call_credentials* grpc_metadata_credentials_create_from_plugin(
grpc-haskell-core>     |         ^
grpc-haskell-core> GRPCAPI grpc_call_credentials* grpc_metadata_credentials_create_from_plugin(
grpc-haskell-core>         ^
grpc-haskell-core> 1 error generated.
grpc-haskell-core> `gcc' failed in phase `C Compiler'. (Exit code: 1)

--  While building package grpc-haskell-core-0.0.0.0 using:
      /Users/arazm/.stack/setup-exe-cache/x86_64-osx/Cabal-simple_mPHDZzAJ_3.0.1.0_ghc-8.8.3 --builddir=.stack-work/dist/x86_64-osx/Cabal-3.0.1.0 build --ghc-options ""
    Process exited with code: ExitFailure 1

Always run RECV_INITIAL_METADATA at least once

Turns out to be really important to do this exactly once.
Not doing so can cause RST_STREAM / INTERNAL errors.

  /** Receive initial metadata: one and only one MUST be made on the client,
      must not be made on the server.
      This op completes after all initial metadata has been read from the
      peer. */

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.